QT中开辟二维数组出错

jxnuwzq 2015-07-28 02:42:38

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 *)*72628);//创建t变量数组
////出错位置
for(int i=0;i<72628;i++)
t[i]=(float *)malloc(sizeof(float)*73251);


出错位置如上标注开辟t[0]的时候就已经出错,但count却成功开辟
...全文
415 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
love1code 2015-07-30
  • 打赏
  • 举报
回复
还有malloc次数多了,记录信息就多,会产生内存碎片。
love1code 2015-07-30
  • 打赏
  • 举报
回复
动态分配,可以动态调整容量啊。
jxnuwzq 2015-07-30
  • 打赏
  • 举报
回复
引用 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;
}
不是方法问题,而是开辟的容量大小
love1code 2015-07-30
  • 打赏
  • 举报
回复
你这开辟的其实都是一维数组。只不过先开辟的是一个指针数组,在给数组里的指针分配新的内存。 释放起来很麻烦。 真正的动态分配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;
}
jiqiang01234 2015-07-30
  • 打赏
  • 举报
回复
为何不用QVector?
彩墨轩 2015-07-30
  • 打赏
  • 举报
回复
QT最好不要使用malloc/free,控制不好生命周期的话,bug都不知道在哪里,还是用new/delete。 原谅我没看代码打个酱油
jxnuwzq 2015-07-28
  • 打赏
  • 举报
回复
可不可以告诉我哪里错了以及为什么会错
worldy 2015-07-28
  • 打赏
  • 举报
回复
引用 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");
    }
赵老师终于出手了
赵4老师 2015-07-28
  • 打赏
  • 举报
回复
小心驶得万年船!
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");
    }
jxnuwzq 2015-07-28
  • 打赏
  • 举报
回复
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);
     
这个更大为什么反而可以,求解

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧