Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 初始化2D数组时出现分段错误_C_Segmentation Fault_Malloc_Multidimensional Array - Fatal编程技术网

C 初始化2D数组时出现分段错误

C 初始化2D数组时出现分段错误,c,segmentation-fault,malloc,multidimensional-array,C,Segmentation Fault,Malloc,Multidimensional Array,我已经检查了我的代码是否正确地划分了内存空间,但只要我尝试将2D数组初始化为一些值,然后对这些值求和,我就会在一个2x2数组上收到一个分段错误。我希望最终将我的代码扩展到一个更大的数组,但我甚至不能在这里工作。我知道有很多关于malloc和2D数组的分段错误的帖子,但是我一直找不到一个可以帮助我解决问题的帖子,因为我的C知识才刚刚开始。如果您能提供任何帮助,或者您能向我指出前面的问题,我将不胜感激。谢谢大家! #include <stdlib.h> #include <stdi

我已经检查了我的代码是否正确地划分了内存空间,但只要我尝试将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);
 }
#包括
#包括
#包括
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++)