初始化2D阵列时出现分段错误

use*_*843 3 c malloc segmentation-fault multidimensional-array

我已经检查过我的代码是否正确地划分了内存空间,但是一旦我尝试将我的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);
 }
Run Code Online (Sandbox Code Playgroud)

And*_*ell 6

你已成为一个经典失误的受害者:使用<=而不是<.

for(i=0; i<=N; i++)
Run Code Online (Sandbox Code Playgroud)

这将初始化array [0],array [1]和MOST IMPORTANTLY数组[2](因为2 <= 2),但是你没有三个指针的malloc空间,只有两个.

这是你想要的:

for(i=0; i<N; i++)
Run Code Online (Sandbox Code Playgroud)

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

(不是说你没有其他的错误,但这绝对是其中之一.)