繁体   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