我是一名新手程序员,可能有大约8-9周的C编程经验。 目前我正在创建一个程序,它将从文本文件中读取一些行,将它们存储在一个结构中,计算一些东西,然后打印出数据。我正在使用Microsoft Visual 2010 Express
每当我尝试运行程序时,它会立即给我一条错误消息:
Lab 7 Part B.exe中的0x777915de处的未处理异常:0xC0000005: 访问冲突读取位置0x00460310。
我的问题 - 我有什么办法可以追踪这个问题的起源吗?
如果我被允许将我的整个代码发布到这里,我不是百分之百确定,因为这可能被认为是一个懒散而不是自己搞清楚事情。由于我也不知道它来自何处,我也无法发布我的代码的特定块。遗憾。
如果我再次尝试再次运行,则会出现此错误:
Lab 7 Part B.exe中的0x777915de处的未处理异常:0xC0000005:The 操作成功完成。
每当我尝试多次运行程序时它就会停留在那里。这两个错误都要求我“打破”或“继续”。
如果有任何帮助,第二个错误将始终停在此行代码中。
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行。 (pt1 - pt10)
pt1 -400 400 1
编辑2:
在fizzer的帮助下,我们修复了该计划。根据他的解释,我将20个结构的数组的地址发送到我的getdata
函数中,这与20的第一个结构的地址相同。我为修复问题所做的是添加了一个{ {1}}围绕函数调用循环遍历每个结构的地址。
for loop
这允许程序将EACH结构的地址传递给以下函数,而不是传递整个数组的地址。从我收集到的未处理的异常错误是由程序无法将文件中的信息存储到数组中引起的。这导致编译器随后读取垃圾,每次打开文件以收集数据时都会导致错误。至少,我认为这就是发生的事情。
感谢您的帮助!绝对拯救了我几个晚上盯着这段代码。
答案 0 :(得分:3)
&data[i]->x, &data[i]->y, &data[i]->elbow
scanf
需要指针。 (data [i] - &gt; stringname已经是指向第一个元素的指针。)
修改的
SCARADATA应该是什么?整个20个结构数组的类型,或数组中一个元素的类型?我怀疑后者。这是让程序运行的一种方法:
typedef struct
{
...
} SCARADATA; /* not [20] */
/* . instead of -> */
fscanf (file, "%s\t%lf\t%lf\t%d", data[i].stringname, &data[i].x, &data[i].y, &data[i].elbow);
int main() /* main returns int */
{
SCARADATA data[20];
getdata(data);
return 0;
}
有关数组与指针的详细信息,请参阅comp.lang.c FAQ。
答案 1 :(得分:-1)
首先,请注意C在C ++,Java等方面没有例外。
这种“访问冲突”似乎是某些其他操作系统中被称为“分段错误”的东西:您正在访问不应该使用的内存,因为指针的使用不当(或者是相同的数组)在C)。
建议:在调试器中运行该程序。