我是一名新手程序员,可能有大约 8-9 周的 C 编程经验。目前我正在创建一个程序,该程序将从文本文件中读取一些行,将它们存储在一个结构中,计算一些东西,然后将数据打印出来。我正在使用 Microsoft Visual 2010 Express
每当我尝试运行该程序时,它都会立即给我一条错误消息:
Lab 7 Part B.exe 中 0x777915de 处的未处理异常:0xC0000005:访问冲突读取位置 0x00460310。
我的问题 - 我能做些什么来追踪这个问题的根源吗?
我不能 100% 确定我是否可以将我的整个代码发布到这里,因为这可能被认为是一个懒惰的人,而不是自己解决问题。由于我也不知道它来自哪里,我也无法发布我的代码的特定块。对不起。
如果我尝试再次运行它,则会出现此错误:
Lab 7 Part B.exe 中 0x777915de 处未处理的异常:0xC0000005:操作成功完成。
然后,每当我尝试多次运行该程序时,它就会停留在那里。这两个错误都要求我“中断”或“继续”。
如果它有任何帮助,第二个错误始终在这行代码处停止。
SetLastError(TL_LastError); return(ptd);
绿色箭头指向返回。伴随错误的文件称为“tidtable.c”。如果我能够发现任何有助于解决此问题的方法,我会尽快更新。
谢谢。
编辑:所以我发现了 F10 并最终只是通过了代码,并以某种方式发现当黄色箭头指向该getdata
行时错误正在出现。然后当我再次按 F10 时,错误开始并停留在那里。我发布了我认为是罪魁祸首的代码块,希望能解决问题。
这是我的主要功能:
void main()
{
SCARADATA data;
getdata(&data);
}
这是功能:
void getdata (SCARADATA *data)
{
int i;
FILE *file;
char fName [MAX];
sprintf (fName, "(exactfilepath)");
file = fopen(fName, "r");
if(file==NULL)
{
printf("\nInvalid File.");
system ("pause");
}
else
{
for (i=0; i<=10; i++)
{
fscanf (file, "%s\t%lf\t%lf\t%d", data[i]->stringname, data[i]->x, data[i]->y, data[i]->elbow);
}
}
fclose (file);
}
这是我用来存储读取数据的结构:
typedef struct
{
char stringname[40];
double x, y;
int elbow;
double ang1, ang2;
bool isValid;
} SCARADATA [20];
以及程序正在读取文本文件的示例。这有10行。(点 1 - 点 10)
点 1 -400 400 1
编辑 2:在 fizzer 的帮助下,我们修复了程序。根据他的解释,我将 20 个结构的数组的地址发送到我的getdata
函数中,这与 20 的第一个结构的地址相同。我为解决问题所做的for loop
工作是在函数调用周围添加一个循环遍历每个结构的地址。
for (i=0; i<10; i++)
{
getdata(&data[i]);
findangles (&data[i]);
printdata (&data[i]);
}
这允许程序将 EACH 结构的地址传递给以下函数,而不是传递整个数组的地址。我收集到的未处理异常错误是由于程序无法将文件中的信息存储到数组中引起的。这导致编译器随后读取垃圾,导致每次打开文件收集数据时都会出错。至少,我认为这就是发生的事情。
感谢您的帮助 fizzer!绝对节省了我几个晚上盯着这段代码的时间。