user-0 提问: C语言读取txt文件中的数据，printf显示读取的数与txt中存的数不一致，怎么回事

回复:
user: user-1
content: 1L已经指明了，就是颠倒使用  dst = (double**)malloc(sizeof(double*)*col); //row? dst[0] = (double*)malloc(sizeof(double)*row*col); for (i = 1; i<col; i++) dst[i] = dst[i - 1] + row; //col？

user: user-2

user: user-0
content: 引用 5 楼 cfjtaishan 的回复:double **array2DI(int col, int row) {     double **dst;     int i;     dst = (double**)malloc(sizeof(double*) * row);      for (i = 0; i < col; i++)         dst[i] = (double*)malloc(sizeof(double) * col);      /*     for (i = 1; i<col; i++)         dst[i] = dst[i - 1] + row;     */     return dst; } 改一下函数array2DI的实现试试； 另外， main函数里return 0（打开文件失败时）和其类型void不匹配。 我用了你修改的，结果还是一样的，还有别的修改方法吗？

user: user-3
content: 仅供参考：#include <stdio.h> #include <stdlib.h> #include <malloc.h> int **newarr2d(int rows,int cols) {     int **p,i;      p=(int **)malloc(rows*sizeof(int *));     if (NULL==p) exit(1);     for (i=0;i<rows;i++) {         p[i]=(int *)malloc(cols*sizeof(int));         if (NULL==p[i]) exit(1);     }     return p; } void deletearr2d(int **p,int rows) {     int i;      for (i=0;i<rows;i++) {         free(p[i]);     }     free(p); } int main() {     int **arr2d,i,j,r,c;      r=4;     c=5;     //在堆中开辟一个4×5的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      r=6;     c=3;     //在堆中开辟一个6×3的二维int数组     arr2d=newarr2d(r,c);     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             arr2d[i][j]=i*c+j;         }     }     for (i=0;i<r;i++) {         for (j=0;j<c;j++) {             printf(" %2d",arr2d[i][j]);         }         printf("\n");     }     deletearr2d(arr2d,r);      return 0; } //  0  1  2  3  4 //  5  6  7  8  9 // 10 11 12 13 14 // 15 16 17 18 19 //  0  1  2 //  3  4  5 //  6  7  8 //  9 10 11 // 12 13 14 // 15 16 17 //

user: user-3
content: 使用数据断点功能Debug  参考下面：#include <time.h> #include <stdlib.h> #include <windows.h> int main() {     int a,b[11];//本来是b[10]，为判断哪句越界，故意声明为b[11]      srand((unsigned int)time(NULL));//按两次F11，等黄色右箭头指向本行时，调试、新建断点、新建数据断点，地址：&b[10]，字节计数：4，确定。     while (1) {//按F5，会停在下面某句，此时a的值为10，b[10]已经被修改为对应0..4之一。         b[(a=rand()%11)]=0;         Sleep(100);         b[(a=rand()%11)]=1;         Sleep(100);         b[(a=rand()%11)]=2;         Sleep(100);         b[(a=rand()%11)]=3;         Sleep(100);         b[(a=rand()%11)]=4;         Sleep(100);     }     return 0; }

user: user-4
content: 因为你读取的时候行列颠倒了

user: user-2

user: user-5
content: 在两次输出中间没有其他操作，理论上是不改输出结果不一致的。所以，很有可能是申请（malloc)内存时出了问题。所以，仔细看一下array2DI的实现吧

user: user-5
content: double **array2DI(int col, int row) {     double **dst;     int i;     dst = (double**)malloc(sizeof(double*) * row);      for (i = 0; i < col; i++)         dst[i] = (double*)malloc(sizeof(double) * col);      /*     for (i = 1; i<col; i++)         dst[i] = dst[i - 1] + row;     */     return dst; } 改一下函数array2DI的实现试试； 另外， main函数里return 0（打开文件失败时）和其类型void不匹配。

user: user-6
content: 你用到了二维数组，我看循环次数不是太多，你可以在出问错的那次循环那里设置断点 （条件断点），然后看是谁改了那里的数值。

user: user-0
content: 我首先定义了一个二维的动态数组，然后用动态数组去读取txt文件中的数字，一共是30*20个，读取的时候，我用了printf，显示的数字是对的，全部读取完毕后，我又用printf显示了某一行，发现和txt中数字有出入