簡體   English   中英

int **矩陣分割錯誤

[英]int** matrix segmentation fault

我試圖通過引用傳遞矩陣,然后動態對其進行初始化。 這只是一個例子:

int main(int argc, char* argv[]) {
  int** matrix = NULL;

  initialize(&matrix, 8);

  return 0;
}

void initialize(int*** matrix, int size) {
  *matrix = (int**) calloc(size, sizeof(int*));

  for (int i = 0; i < size; ++i) {
    *matrix[i] = (int*) calloc(size, sizeof(int));  // cashes here with segmentation fault
  }

  for (int i = 0; i < size; ++i) {
    for (int j = 0; j < size; ++j) {
      *matrix[i][j] = 5; // some number, doesn't matter for now
    }
  }
}

我還嘗試了替代方法,將矩陣保存在連續的內存空間中:

*matrix = (int**) calloc(size, sizeof(int*));

  *matrix[0] = (int*) calloc(size * size, sizeof(int));
  for (int i = 1; i < size; ++i) {
    *matrix[i] = *matrix[0] + size * i; // crashes here, segmentation fault
  }

卻彈出同樣的錯誤。 從不索引0,從索引1。我不明白,我在做什么錯?

任何幫助將不勝感激!

親切的問候,勞爾。

*matrix[i] = (int*) calloc(size, sizeof(int));

被解釋為:

*(matrix[i]) = (int*) calloc(size, sizeof(int));

這就是為什么您看到細分錯誤。

采用:

(*matrix)[i] = (int*) calloc(size, sizeof(int));

您在該行中有一個類似的錯誤:

  *matrix[i][j] = 5;

應該是:

  (*matrix)[i][j] = 5;

您可以通過在函數中使用臨時變量來避免某些混亂。

void initialize(int*** matrix, int size) {

   int** m = calloc(size, sizeof(int*));

   for (int i = 0; i < size; ++i) {
      m[i] = calloc(size, sizeof(int));
   }

   for (int i = 0; i < size; ++i) {
      for (int j = 0; j < size; ++j) {
         m[i][j] = 5; // some number, doesn't matter for now
      }
   }

   *matrix = m;
}

暫無
暫無

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

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