誰かがここで何が起こっているのかについて何か考えがありますか?
私は得る
Unhandled exception at 0x5081f508 (msvcr100d.dll) in myProgram.exe: 0xC0000005: Access violation writing location 0x041e0010.
この行で:
fscanf(fp, " %lf %lf %lf\n", &vertices[i].x, &vertices[i].y, &vertices[i].z );
プログラムを実行しているときですが、デバッグモード(Visual Studio 2010)でプログラムを実行すると、すべてがうまくいきます。はfscanf()
期待どおりにファイルを読み取ります。
例外は実際にはinput.c
の行でスローされます。
#else /* _UNICODE */
_FASSIGN( longone-1, (char*)pointer , pFloatStr, (char)decimal, _loc_update.GetLocaleT());
#endif /* _UNICODE */
私が間違っていなければ。そして、私は行の周りのUNICODEについてのこれらのコメントが何を意味するのかわかりません、それがまさに私がそれらをここに含めた理由です。
追加情報
コールスタック:
msvcr100d.dll!_fassign_l(int flag, char * argument, char * number, localeinfo_struct * plocinfo) Line 258 + 0x6 bytes C++
>msvcr100d.dll!_input_l(_iobuf * stream, const unsigned char * format, localeinfo_struct * plocinfo, char * arglist) Line 1281 + 0x21 bytes C++
msvcr100d.dll!vfscanf(int (_iobuf *, const unsigned char *, localeinfo_struct *, char *)* inputfn, _iobuf * stream, const char * format, localeinfo_struct * plocinfo, char * arglist) Line 61 + 0x13 bytes C
msvcr100d.dll!fscanf(_iobuf * stream, const char * format, ...) Line 99 + 0x18 bytes C
myProgram.exe!main(int argc, char * * argv) Line 166 + 0x49 bytes C++
myProgram.exe!__tmainCRTStartup() Line 555 + 0x19 bytes C
myProgram.exe!mainCRTStartup() Line 371 C
その他の情報
このプログラムは、OpenGLを使用したシェーディングに関するものでありvertices
、呼び出しに表示されるのfscanf()
は、次の配列です。
typedef struct _Vertex {
double x, y, z;
int polygonsThisPartOf; // Number of polygons this vertex is a part of
Point normal;
} Vertex;
私のプログラムの最初のバージョンでは、vertices
は配列の配列であり、すべてが正常に実行されました。vertices
この例外は、上記の配列として使用するようにコードを変更した後に発生し始めましたstruct
。
配列の割り当て
// ˇ THIS is the mistake
vertices = (Vertex *) malloc(vcount * sizeof(Vertex *));
if (vertices == NULL) exit(-2);
vcount
正しいです。