gpt4 book ai didi

c - 未处理的异常错误 C 编程

转载 作者:行者123 更新时间:2023-12-02 02:04:46 25 4
gpt4 key购买 nike

我是一名新手程序员,大概有 8-9 周的 C 编程经验。目前我正在创建一个程序,该程序将从文本文件中读取一些行,将它们存储在一个结构中,计算一些东西,然后打印出数据。我正在使用 Microsoft Visual 2010 Express

每当我尝试运行该程序时,它都会立即给我一条错误消息:

Unhandled exception at 0x777915de in Lab 7 Part B.exe: 0xC0000005: Access violation reading location 0x00460310.

我的问题 - 我能做些什么来追踪这个问题的根源吗?

我不是 100% 确定我是否被允许将我的整个代码发布到这里,因为这可能被认为是一个懒惰的人,而不是自己解决问题。因为我也不知道它来自哪里,所以我也不能发布我的特定代码块。对不起。

如果我尝试再次运行它,则会出现此错误:

Unhandled exception at 0x777915de in Lab 7 Part B.exe: 0xC0000005: The operation completed successfully.

然后,每当我尝试多次运行该程序时,它就停留在那里。这两个错误都要求我“中断”或“继续”。

如果有任何帮助,第二个错误始终会在这行代码处停止。

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 个结构的第一个结构的地址相同。我为解决这个问题所做的是在函数调用周围添加了一个 for 循环,以循环遍历每个结构的地址。

for (i=0; i<10; i++)
{
getdata(&data[i]);
findangles (&data[i]);
printdata (&data[i]);
}

这允许程序将每个结构的地址传递给后面的函数,而不是传递整个数组的地址。根据我收集到的信息,未处理的异常错误是由于程序无法将文件中的信息存储到数组中引起的。这导致编译器随后读取垃圾,导致每次打开文件收集数据时出错。至少,我认为这就是发生的事情。

感谢您的帮助 fizzer!盯着这段代码绝对省去了我几个晚上的时间。

最佳答案

&data[i]->x, &data[i]->y, &data[i]->elbow

scanf 需要指针。 (data[i]->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有关数组与指针的详细信息。

关于c - 未处理的异常错误 C 编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15716112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com