关于malloc的问题??

SimerJoe 2009-12-02 10:17:47
代码如下:
double **result = (double **)malloc(sizeof(double **)*row);
for(int i=0;i<size1;i++)
{
result[i] = (double *)malloc(sizeof(double *)*col);//这里出错,当i=0时,正常,当循环一次以后,i=1时,出错。编译通过。
for(int j=0;j<size2;j++)
{
result[i][j] = 0;
}
}

我的本意是用一个2维指针来表示一个2维数组。但是当第2次进行内存分配的时候malloc那句出错了,请问咋回事?
...全文
171 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
SimerJoe 2009-12-02
  • 打赏
  • 举报
回复
问题解决了,感谢2楼和6楼。
我的size1,size2,row,col都是对的,问题出在
result[i] = (double *)malloc(sizeof(double *)*col);//分配空间不足
sizeof(double *)==4,sizeof(double )==8

result[i] = (double *)malloc(sizeof(double)*col);
这里,我想大概是由于第一次运行的时候内存溢出了,分配的double覆盖了其他内存,导致第2次malloc分配时出错。

我为什么会用result[i] = (double *)malloc(sizeof(double *)*col)来分配呢?因为我觉得既然result[i]是一个指针类型的变量,那么他的值就应该是(double *)malloc(sizeof(double)*col)的地址。
没想到赋值符号“=”会自动将右边(double *)malloc(sizeof(double)*col)这块内存的地址放到result[i]里面!
想想也是当我们
double * p = (double *)malloc(sizeof(int));
double * p1 = p;
也要是这样赋值,而不是 *p1=*p;
谢谢各位啦!
kostion 2009-12-02
  • 打赏
  • 举报
回复
画图,一画就出来
The_facE 2009-12-02
  • 打赏
  • 举报
回复
你用一个double**来保存了row个double**?
然后又用double*保存col个double*?
最后让所有的double*都等于0?

但是,很遗憾,这只是逻辑问题,在我这里什么错误都没出。你的size1和row有关系么?
skysoshy 2009-12-02
  • 打赏
  • 举报
回复



#include <stdio.h>
#include <stdlib.h>

int
main(int argc, char **argvPP)
{
int index1I = 0;
int index2I = 0;
int row = 5;
int col = 5;
double **resultPP = NULL;


resultPP = (double **)malloc(sizeof(double*) * row * col);

for(index1I = 0; index1I < row; index1I++)
{
resultPP[index1I] = (double *)malloc(sizeof(double)* col);
for(index2I = 0; index2I < col; index2I++)
{
resultPP[index1I][index2I] = index2I;
}
}

for(index1I = 0; index1I < row; index1I++)
{
for(index2I = 0; index2I < col; index2I++)
{
printf("resultPP[%d][%d] = %f.\n",index1I, index2I,
resultPP[index1I][index2I]);
}
free(resultPP[index1I]);
}

free(resultPP);

return (0);

} /* End of main() */

selooloo 2009-12-02
  • 打赏
  • 举报
回复
result[i] = (double *)malloc(sizeof(double *)*col);//分配空间不足
sizeof(double *)==4,sizeof(double )==8

result[i] = (double *)malloc(sizeof(double)*col);
  • 打赏
  • 举报
回复
[Quote=引用楼主 simerjoe 的回复:]
代码如下:
double **result = (double **)malloc(sizeof(double **)*row); //这里的2维指针里有row个指针元素
for(int i=0;i <row;i++) //所以这里是处理每个指针元素,一共row个
{
    result[i] = (double *)malloc(sizeof(double *)*col);//这里出错,当i=0时,正常,当循环一次以后,i=1时,出错。编译通过。
    for(int j=0;j <size2;j++)
    {
        result[i][j] = 0;
    }
}

我的本意是用一个2维指针来表示一个2维数组。但是当第2次进行内存分配的时候malloc那句出错了,请问咋回事?
[/Quote]

看我前面的注释
wind_breez 2009-12-02
  • 打赏
  • 举报
回复
没看出问题啊 !是不是row的值有问题?
highball 2009-12-02
  • 打赏
  • 举报
回复
double **result = (double **)malloc(sizeof(double **)*row);
你是想用这个分配一个2维数组空间,每一个元素宽度是一个double类型的宽度?
我觉得这个语句分配的是1维的数组空间,每一个元素的宽度是一个指针的宽度。
starwalker 2009-12-02
  • 打赏
  • 举报
回复
col、row、size1、size2的值是不是不对
varding 2009-12-02
  • 打赏
  • 举报
回复
	int row=10;													
int col=20;
double **result = (double **)malloc(sizeof(double *)*row); //sizeof(double*)就行了

for(int i=0;i <row;i++) //不要用size1,size2 都用row和col吧,不然很容易混乱
{
result[i] = (double *)malloc(sizeof(double)*col);//sizeof(double),这个需要分配的是double类型的而不是double*
for(int j=0;j <col;j++)
{
result[i][j] = i+j; //测试
cout<<result[i][j]<<" "; //输出测试
}
}

69,382

社区成员

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

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