gpt4 book ai didi

C - fprintf 的选择值的段错误

转载 作者:行者123 更新时间:2023-11-30 19:44:30 25 4
gpt4 key购买 nike

我有一段代码,可以根据用户定义的网格大小计算坐标,并将其打印到文本文件中。但是,当我运行该程序时,出现段错误,但仅适用于网格的值为 5 或 7,所有其他值均按预期工作。

代码如下

// Writing OUTPUT 1 to file
// Creating & opening file
FILE *f1 = fopen("coords_output.txt", "w");
if(f1 == NULL)
{
printf("Error in opening file\n");
exit(0);
}
// Writing to file
for(i=0; i < arrayLength; i++)
{
for(j=0; j < arrayLength; j++)
{
fprintf(f1, "\n%d,%d %d", i, j, coordArray[i][j]);
}
}
// Close file
fclose(f1);here

如果//writing to file 下的整个部分被删除,则程序可以正常工作,并且无论我在那里放置什么,程序都会失败。

我对c不太了解,尤其是在这样的领域,但是我花了很多时间试图解决这个问题,但似乎无法找到答案。

编辑:coordArray 定义为

coordArray = malloc(arrayLength * sizeof(int *));
for(i=0; i <= arrayLength; i++)
{
coordArray[i] = malloc(arrayLength * sizeof(int));
}

arrayLength 取自用户输入

validInput = validInput && sscanf(argv[1], "%d", &arrayLength); 

最佳答案

此代码不起作用(根据您提供的代码进行修改):

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int arrayLength = 5;
int i,j;
int **coordArray;
coordArray = malloc(arrayLength * sizeof(int *));
for(i=0; i <= arrayLength; i++)
{
coordArray[i] = malloc(arrayLength * sizeof(int));
}
for(i=0; i < arrayLength; i++)
{
for(j=0; j < arrayLength; j++)
{
printf("\n%d,%d %d", i, j, coordArray[i][j]);
}
}
return 0;
}

它不起作用,因为第一个 for循环正在访问超出数组末尾的 1。尽管看起来可行,但无论 arrayLength 的值如何,代码都会被破坏。 。它可能对某些值起作用的原因是由于段错误是如何发生的,互联网上有很多关于它们发生的时间和原因的资源,这里有一个 random one这似乎很好地解释了这一点。

此代码有效(请注意第一个 <= 循环中从 <for 的更改):

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int arrayLength = 5;
int i,j;
int **coordArray;
coordArray = malloc(arrayLength * sizeof(int *));
for(i=0; i < arrayLength; i++)
{
coordArray[i] = malloc(arrayLength * sizeof(int));
}
for(i=0; i < arrayLength; i++)
{
for(j=0; j < arrayLength; j++)
{
printf("\n%d,%d %d", i, j, coordArray[i][j]);
}
}
return 0;
}

如果不使用调试器或像 Valgrind 这样的分析工具,可能很难找到这样的错误。我强烈建议您花时间学习如何使用此类工具,以便将来找到这些错误的根源。

关于C - fprintf 的选择值的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28036300/

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