私はCでこのようなものを持っています:
unsigned char a = structTypeInstance->b ;
whereb
は と同じ型a
です。
これで私は受け取りSIGSEGV
ます。
なんで?
編集: structTypeInstance の以前に宣言されたフィールドにアクセスできます。私の唯一の予感は、メモリが structTypeInstance に割り当てられている場所では十分ではないということです。それは可能ですか?
私はCでこのようなものを持っています:
unsigned char a = structTypeInstance->b ;
whereb
は と同じ型a
です。
これで私は受け取りSIGSEGV
ます。
なんで?
編集: structTypeInstance の以前に宣言されたフィールドにアクセスできます。私の唯一の予感は、メモリが structTypeInstance に割り当てられている場所では十分ではないということです。それは可能ですか?
はい、可能です。しかし、コードstructTypeInstance
が宣言されている場所、対応する構造体の定義全体が何であるか、割り当てられている場所を示すことを拒否しているため、実際には確信が持てません。
時々バグは書くのと同じくらい簡単です
struct FOOBAR {
char big[16380];
char b[4];
};
struct FOOBAR *foo;
foo = malloc (sizeof foo); /* Allocates just a handful of bytes. */
あなたが本当に意味したとき
foo = malloc (sizeof *foo); /* Allocates enough for a complete struct FOOBAR. */