user-0 提问: QT中开辟二维数组出错

回复:
user: user-1
content: 还有malloc次数多了，记录信息就多，会产生内存碎片。

user: user-1
content: 动态分配，可以动态调整容量啊。

user: user-0
content: 引用 8 楼 love1code 的回复:你这开辟的其实都是一维数组。只不过先开辟的是一个指针数组，在给数组里的指针分配新的内存。 释放起来很麻烦。 真正的动态分配2维数组。我一般这样写 int main (void) { 	int i,j; 	float(*t)[5]=(float(*)[5])malloc(sizeof(float)*5*3); 	//5代表列数，3是行数  	for(i=0;i<3;++i) 	 for(j=0;j<5;++j) 	   t[i][j]=1.0; 	 	 	//这样free一下就OK了  	free(t); 	return 0; } 不是方法问题，而是开辟的容量大小

user: user-1
content: 你这开辟的其实都是一维数组。只不过先开辟的是一个指针数组，在给数组里的指针分配新的内存。 释放起来很麻烦。 真正的动态分配2维数组。我一般这样写 int main (void) { 	int i,j; 	float(*t)[5]=(float(*)[5])malloc(sizeof(float)*5*3); 	//5代表列数，3是行数  	for(i=0;i<3;++i) 	 for(j=0;j<5;++j) 	   t[i][j]=1.0; 	 	 	//这样free一下就OK了  	free(t); 	return 0; }

user: user-2
content: 为何不用QVector?

user: user-3
content: QT最好不要使用malloc/free,控制不好生命周期的话，bug都不知道在哪里，还是用new/delete。  原谅我没看代码打个酱油

user: user-0
content: 可不可以告诉我哪里错了以及为什么会错

user: user-4
content: 引用 2 楼 zhao4zhong1 的回复:小心驶得万年船！ float **count; float **t;     count=(float **)malloc(sizeof(float *)*72628L);     if (count) {         long int i;         for (i=0;i<72628L;i++) {             count[i]=(float *)malloc(sizeof(float)*73251L);             if (NULL==count[i]) {                 while (1) {                     i--;                     free(count[i]);                     if (i==0) break;                 }                 break;             }         }         if (i<72628L) {             free(count);             count=NULL;         }     }     if (count) {         t=(float **)malloc(sizeof(float *)*72628L);         if (t) {             long int i;             for (i=0;i<72628L;i++) {                 t[i]=(float *)malloc(sizeof(float)*73251L);                 if (NULL==t[i]) {                     while (1) {                         i--;                         free(t[i]);                         if (i==0) break;                     }                     break;                 }             }             if (i<72628L) {                 free(t);                 t=NULL;             }         }         if (t) {             //use count and t             //...             //...              //free t             for (long int i=0;i<72628L;i++) free(t[i];             free(t);             t=NULL;              //free count             for (long int i=0;i<72628L;i++) free(count[i];             free(count);             count=NULL;         } else {             printf("Can not malloc t!\n");             //free count             for (long int i=0;i<72628L;i++) free(count[i];             free(count);             count=NULL;         }     } else {         printf("Can not malloc count!\n");     }   赵老师终于出手了

user: user-5
content: 小心驶得万年船！ float **count; float **t;     count=(float **)malloc(sizeof(float *)*72628L);     if (count) {         long int i;         for (i=0;i<72628L;i++) {             count[i]=(float *)malloc(sizeof(float)*73251L);             if (NULL==count[i]) {                 while (1) {                     i--;                     free(count[i]);                     if (i==0) break;                 }                 break;             }         }         if (i<72628L) {             free(count);             count=NULL;         }     }     if (count) {         t=(float **)malloc(sizeof(float *)*72628L);         if (t) {             long int i;             for (i=0;i<72628L;i++) {                 t[i]=(float *)malloc(sizeof(float)*73251L);                 if (NULL==t[i]) {                     while (1) {                         i--;                         free(t[i]);                         if (i==0) break;                     }                     break;                 }             }             if (i<72628L) {                 free(t);                 t=NULL;             }         }         if (t) {             //use count and t             //...             //...              //free t             for (long int i=0;i<72628L;i++) free(t[i];             free(t);             t=NULL;              //free count             for (long int i=0;i<72628L;i++) free(count[i];             free(count);             count=NULL;         } else {             printf("Can not malloc t!\n");             //free count             for (long int i=0;i<72628L;i++) free(count[i];             free(count);             count=NULL;         }     } else {         printf("Can not malloc count!\n");     }

user: user-0
content: float **count; float **t;   count=(float **)malloc(sizeof(float *)*72628);//根据两个vector大小创建count数组   for(int i=0;i<72628;i++)         count[i]=(float *)malloc(sizeof(float)*73251);    t=(float **)malloc(sizeof(float *)*144616);//创建t变量数组         ////出错位置    for(int i=0;i<72628;i++)         t[i]=(float *)malloc(sizeof(float)*144616);       这个更大为什么反而可以，求解