我不斷收到段錯誤,不知道為什麼

謝哈布A

這段代碼是用來製作和打印一個矩陣,但我不確定為什麼我會出現段錯誤,這是因為我沒有釋放內存,如果是這樣,我將如何釋放它?

void printMatrix(struct Matrix *M){
  struct Matrix *temp = M;
  for(int i=0; i< temp->rows;i++){
    for(int j=0; j< temp->cols;j++){
      printf("%.f",getVal(temp,i,j));
    }
    printf("\n");
  }
}
void makeMatrix(struct Matrix *M, int row, int col, int num){
   M = malloc(sizeof(struct Matrix));
  M->rows=row;
  M->cols=col;
  M->m =malloc(100*sizeof(double)*M->rows*M->cols);
  for(int i=0; i<M->rows;i++){
    for(int j=0; j<M->cols;j++){
        setVal(M,i,j,num);
    }
  }
  free(M);
}
int  main(int argc, char const *argv[]) {
  struct Matrix *test;
  makeMatrix(test,10,10,10);
  printMatrix(test);

  return 0;
}
斯坦尼斯爾

你的makeMatrix功能錯了。參數執行M是一個局部變量makeMatrixThereofre任何改變M沒有看到當函數結束。由於 resulttest在傳遞給printMatrix導致失敗時未初始化,因此指針被取消引用。

解決方案是M按值從函數返回

struct Matrix *makeMatrix(int row, int col, int num){
  struct Matrix *M = malloc(sizeof(struct Matrix));
  if (!M) return NULL;
  M->rows=row;
  M->cols=col;
  M->m =malloc(100*sizeof(double)*M->rows*M->cols);
  if (!M->m) {
    free(M);
    return NULL;
  }
  for(int i=0; i<M->rows;i++){
    for(int j=0; j<M->cols;j++){
        setVal(M,i,j,num);
    }
  }
  return M;
}

用法:

struct Matrix *test = makeMatrix(10,10,10);

此外,malloc(100*sizeof(double)*M->rows*M->cols);看起來有點浪費,因為它消耗的內存比所需的多 100 倍。我很確定malloc(sizeof(double)*M->rows*M->cols);這就足夠了。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

我不知道為什麼我收到錯誤“核心轉儲”C++

我不斷收到此錯誤代碼,但不知道為什麼?只有整數、切片 (`:`)、省略號 (`...`)、numpy.newaxis (`None`) 和整數或

這段代碼得到一個錯誤,這些變量沒有被分配到,我不知道為什麼

我不知道為什麼我的數組顯示錯誤的數字。只想知道為什麼會這樣?

如何打印出一個階乘數?我的代碼不斷打印出太多數字,我不知道為什麼?

VLOOKUP 不工作 不工作,我不知道為什麼

為什麼即使我的代碼與另一個 API 一起工作,我也會不斷收到語法錯誤:JSON 解析?

我似乎無法找出為什麼我不斷收到錯誤“無效的方法聲明;需要返回類型”

有人能發現我代碼中的錯誤嗎?我不知道我錯過了什麼部分,我搞砸了什麼

我的字體出現錯誤,我不知道為什麼。我已將我的字體放在同一個文件夾中,但它說的是以下內容

我的常數在變化,我不知道為什麼,甚至不知道如何

我不知道我對這個數組做錯了什麼

為什麼我收到錯誤未綁定變量 cygwin bash 錯誤

方法打印的比我預期的要多,我不知道為什麼

我的程序總是停止,我不知道為什麼

我的圖像相互重疊,我不知道為什麼

“範圍內”無法正常工作,我不知道為什麼

計數變量不起作用,我不知道為什麼

不知道為什麼我不能調整 div 的大小?

為什麼我收到錯誤“空字段值,即使它不為空?

為什麼我收到錯誤作為意外令牌

我不知道有什麼區別

為什麼我在 FluentValidation MustAsync 中收到 CS1061 錯誤

為什麼我在嘗試使用 reddit API 時會收到 405 錯誤?

為什麼我會收到“錯誤:`mutate()` 列 `regression1` 有問題”?

為什麼我在使用 pylab 製作條形圖時收到此錯誤

為什麼我會收到 JSON 錯誤以及如何修復它

為什麼我會收到“TypeError: unsupported operand type(s) for -: 'str' and 'str'”錯誤?

為什麼我收到以下 Chainlink 錯誤:無法估計氣體