[英]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.