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