簡體   English   中英

在C中按引用傳遞2D動態分配的雙精度數組

[英]Pass by reference 2D dynamically allocated double array in C

我正在嘗試將我的字符串轉換為動態的雙精度數組。 我的字符串的每個空格代表一列,每個“;” 代表新行。 該代碼運行時,僅適用於* F [0] [col]。 當它到達* F [1] [col]時,出現錯誤“ CCode.exe中0x00e4483c處未處理的異常:0xC0000005:訪問沖突讀取位置0xcccccccc。” 有人知道為什么嗎?

void main(void) {  
    double **F = NULL;  
    F = malloc(row * sizeof (double *));  
    for (m=0; m < row;m++) {  
        F[m] = malloc(col * sizeof(double ));
    }  
    FParser(string, &F);
for (m=0;m<rowF;m++)
    free(F[m]);
free(F);
}

void FParser(char string[256], double ***F) {  
  while (dummyChar_ptr != NULL) {
    dummyChar_ptr = strtok(dummyChar_ptr," ");
    while ((dummyChar_ptr) != NULL) {
      *F[row][col] = atof(dummyChar_ptr);
      dummyChar_ptr = strtok(NULL," ");
      col++;
    }
    col=0;
    row++;
    strcpy(dummyChar,string);
    dummyChar_ptr = strtok(dummyChar,";");
    for (x=0;x<row;x++) 
      dummyChar_ptr = strtok(NULL,";");  

  }

//example String: 1 0.1 0 0; 0 1 0 0; 0 0 1 0.1; 0 0 0 0.1

[]在C中的優先級高於一元* ,因此*F[row][col]實際上是*(F[row][col]) ,並且您在錯誤的內存位置中建立索引。

嘗試(*F)[row][col])

順便說一句,無論如何, FParser沒有理由double*** F已經是一個指針; 只是通過。 您需要使用額外的間接級別的唯一原因是FParser需要修改main()F指向的內容。

其他其他建議:

  • 檢查malloc是否成功。
  • 避免全局變量。
  • 除非已檢查源字符串不會使目標緩沖區溢出,否則不要使用strcpy
  • 函數參數char string[256]實際上並不能保證輸入參數是256個(或更多)元素的數組,因此IMO毫無意義,也可能是char* string

暫無
暫無

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

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