C 初始化2D数组时出现分段错误
我已经检查了我的代码是否正确地划分了内存空间,但只要我尝试将2D数组初始化为一些值,然后对这些值求和,我就会在一个2x2数组上收到一个分段错误。我希望最终将我的代码扩展到一个更大的数组,但我甚至不能在这里工作。我知道有很多关于malloc和2D数组的分段错误的帖子,但是我一直找不到一个可以帮助我解决问题的帖子,因为我的C知识才刚刚开始。如果您能提供任何帮助,或者您能向我指出前面的问题,我将不胜感激。谢谢大家!C 初始化2D数组时出现分段错误,c,segmentation-fault,malloc,multidimensional-array,C,Segmentation Fault,Malloc,Multidimensional Array,我已经检查了我的代码是否正确地划分了内存空间,但只要我尝试将2D数组初始化为一些值,然后对这些值求和,我就会在一个2x2数组上收到一个分段错误。我希望最终将我的代码扩展到一个更大的数组,但我甚至不能在这里工作。我知道有很多关于malloc和2D数组的分段错误的帖子,但是我一直找不到一个可以帮助我解决问题的帖子,因为我的C知识才刚刚开始。如果您能提供任何帮助,或者您能向我指出前面的问题,我将不胜感激。谢谢大家! #include <stdlib.h> #include <stdi
#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);
}
#包括
#包括
#包括
int main()
{
双和=0;
int i,j;
int N=2;
双**阵列;
数组=malloc(N*sizeof(double*);
if(array==NULL)printf(“分配内存失败。\n”);
对于(i=0;i您已经成为一个典型错误的受害者:使用您正在为NxN数组分配空间,但在for循环中,您正在尝试访问(N+1)by(N+1)数组。您可以使用以下方法之一替换您的循环:
for(i=0; i<N; i++)
for(i=0;iMany感谢您的清晰解释!该程序现在运行得很好(当然!)作为经验法则:无论何时看到您的手指在C中键入=
,请至少仔细考虑您试图表达的内容。
for(i=0; i<N; i++)
for(i=0; i<N; i++)
for(i=1; i<=N; i++)