这里可能发生了什么?
我得到的是
在这行的位置发生了未处理的异常:0x5081f508(msvcr100d.dll)中的myProgram.exe:0xC0000005:访问违规写入位置0x041e0010。
当运行我的程序时,但是当我在调试模式下逐步执行它(Visual Studio 2010),一切都很顺利;
实际上,异常是在
如果我没记错的话。而且我不知道这些关于UNICODE的评论是什么意思。这也是为什么我在这里包含它们的原因。
在我的程序的第一个版本中,
我得到的是
在这行的位置发生了未处理的异常:0x5081f508(msvcr100d.dll)中的myProgram.exe:0xC0000005:访问违规写入位置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进行着色的,而你在fscanf()
调用中看到的vertices
是一个这样的数组:
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
正确。