gpt4 book ai didi

c - 初始化二维数组时出现段错误

转载 作者:太空狗 更新时间:2023-10-29 15:55:10 25 4
gpt4 key购买 nike

我已经检查过我的代码是否正确地分配了内存空间,但是当我尝试将我的 2D 数组初始化为某些值然后对这些值求和时,我仅在 2x2 数组上收到段错误。我想最终将我的代码扩展到更大的数组,但我什至不能让它在这里工作。我知道有很多关于 malloc 和 2D 数组的段错误的帖子,但是由于我的 C 知识才刚刚开始,所以我一直无法找到可以帮助我解决问题的帖子。如果您能提供任何帮助,或者如果您能指出我之前的问题,将不胜感激。谢谢!

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

int main()
{
double sum=0;
int i,j;
int N = 2;

double **array;
array = malloc(N * sizeof(double *));

if(array == NULL) printf("Failure to allocate memory.\n");

for(i=0; i<=N; i++)
{
array[i] = malloc(N * sizeof(double));
if(array[i] == NULL) {
printf("Failed to allocate memory for arr[%d].\n", i);
exit(0);
}
}

for(i=0; i<=N; i++)
{
for(j=0; j<=N; j++)
{
array[i][j] = 1.0/(i+j);
sum = sum + array[i][j];
}
}

return(0);
}

最佳答案

您已成为经典错误之一的受害者:使用 <=而不是 < .

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

这将初始化 array[0]、array[1] 和最重要的 array[2](因为 2 <= 2),但是您没有为三个指针分配空间,只有两个。

这是你想要的:

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

它将遍历数组[0] 和数组[1](总共有两个条目)。

(并不是说您没有其他错误,但这绝对是其中之一。)

关于c - 初始化二维数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19059151/

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