0x0F6F8EF7处于未处理的异常(msvcr120d.dll)0xC0000005:访问冲突读取位置0x091C5B30

时间:2017-06-01 09:31:51

标签: c

我试图写入txt文件但是在程序写完几乎所有文本之后,我得到了下一个错误:

  

0x0F6F8EF7处的未处理异常(msvcr120d.dll)0xC0000005:访问冲突读取位置0x091C5B30。

跟踪设置为:

trace = fopen("trace.txt", "w");  

arr设为:

int arr[18]; // (also all of the arr values initial to zero.)

for (i = 0; i < 18; i++){
    fprintf(trace, "%08x ", arr[i]);
}

1 个答案:

答案 0 :(得分:2)

我的猜测是循环迭代超过预期导致 arr [i] 超出其固定大小。除此之外,问题可能出在跟踪初始化中。提供有关这些的信息!

这对我有用:

int i;
int mark[5] = {19, 10, 8, 17, 9};
FILE *trace = fopen("C:\\trace.txt", "w");
if (trace == NULL)
{
      printf("Error opening file!\n");
}
for(i = 0; i <= 4; i++){
    fprintf(trace,"%d ", mark[i]);

}
fclose(trace);

<强>结果:

enter image description here

发布后更新: 要正确迭代arr [18],你的for循环应如下所示:

for(i = 0; i <= 17; i++)

这是因为当您定义具有18个元素的数组时,您可以使用arr [0]到arr [17]的成员。

如果你看一下我上面的例子,这里是相同的片段结果,但当你像这样运行for循环时:

for(i = 0; i <= 5; i++)     

注意我已将 i&lt; = 4 更改为 i&lt; = 5 ;

<强>结果:

enter image description here

正如您所看到的,我们正在访问数组边界之外的元素,导致程序在文本文件中写入垃圾。