gpt4 book ai didi

c - 在 C 中通过引用传递二维动态分配的双数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:33:35 26 4
gpt4 key购买 nike

我正在尝试将我的字符串转换为动态 double 组。我的字符串的每个空格代表一列,每个“;”代表一个新行。这段代码运行时,只对*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 个(或更多)元素的数组,所以在我看来它有点毫无意义,也可能是 char* 字符串.

关于c - 在 C 中通过引用传递二维动态分配的双数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2126121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com