簡體   English   中英

初始化2D陣列時出現分段錯誤

[英]Segmentation fault on initializing a 2D 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);
 }

你已成為一個經典失誤的受害者:使用<=而不是<

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

這將初始化array [0],array [1]和MOST IMPORTANTLY數組[2](因為2 <= 2),但是你沒有三個指針的malloc空間,只有兩個。

這是你想要的:

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

它將遍歷數組[0]和數組[1](總共兩個條目)。

(不是說你沒有其他的錯誤,但這絕對是其中之一。)

你正在為NxN數組分配空間,但在你的for循環中,你試圖訪問(N + 1)by(N + 1)數組。 您可以通過以下方法之一替換您的周期:

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

要么

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

假設您正在計算1.0 /(i + j) ,則可以使用第二個,因為當i = 0,j = 0時,第一個將產生除零。 但要注意,如果你使用第二個選項,你應該將索引移動1,如下所示: array [i-1] [j-1] ,因為它們總是從0開始。最好使用第一個選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM