爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5501|回复: 9

(已解决)C语言动态分配内存

[复制链接]
发表于 2014-9-25 19:39:31 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 lysx 于 2014-9-26 08:15 编辑

目的:动态分配大小为nx*ny的二维实型数组
float *arr;
arr=malloc(nx*ny*sizeof(float));
问题:编译后提示: error:  “=“: 无法从”void*“转为”float*“,        IntelliSense: 不能将”void*“类型的值分配到”float“类型的实体。
求助各位大神了!

[答案]:: 在malloc前面加一个强制转换,转换成(float *)。因为malloc返回的指针类型是void* 类型。(From ningking1986)
密码修改失败请联系微信:mofangbao
发表于 2014-9-25 22:08:16 | 显示全部楼层
是不是应该这样弄?用二级指针:
float **arr;
arr=new float*[nx];
for (i=0;i<nx;i++)
{
arr[i]=new float[ny];
}
一维一维的来动态开辟内存空间
密码修改失败请联系微信:mofangbao
发表于 2014-9-26 07:54:14 | 显示全部楼层
在malloc前面加一个强制转换试试,转换成(float *)。
因为malloc返回的指针类型是void* 类型。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-9-26 08:10:50 | 显示全部楼层
本帖最后由 lysx 于 2014-9-26 09:24 编辑
ningking1986 发表于 2014-9-26 07:54
在malloc前面加一个强制转换试试,转换成(float *)。
因为malloc返回的指针类型是void* 类型。

谢谢您的答复,成功了!
但是下面又有问题了,C语言初学者求帮忙解释,谢谢!
double *arr2;
arr2=(double*)malloc(wnew*hnew*sizeof(double));
int x, y, x0, y0;
for (y=0; y<hnew; y++)
{
    for(x=0;x<wnew; x++)
    {
      x0=int(x*cosa-ysina+temp1);
      y0=int(x*sina+ysina+temp2);
     if ( (x0>=0)&&(x0<width)&&(y0>=0)&&(y0<height))
       {
          arr2[x][y]=&arr1[x0][y0];
       }
    }
}

错误提示:(1) error C2109: 下标要求数组或指针类型;(2)IntelliSense: 表达式必须包含指向对象的指针类型
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-9-26 08:28:40 | 显示全部楼层
wkh89 发表于 2014-9-25 22:08
是不是应该这样弄?用二级指针:
float **arr;
arr=new float*[nx];

谢谢关注!
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-9-26 09:55:36 | 显示全部楼层
wkh89 发表于 2014-9-25 22:08
是不是应该这样弄?用二级指针:
float **arr;
arr=new float*[nx];

那用new的话,如何释放内存呢
密码修改失败请联系微信:mofangbao
发表于 2014-9-26 11:05:02 | 显示全部楼层
错误是因为你申请的是一个一维数组的空间。

http://blog.csdn.net/morewindows/article/details/7664479
朋友请参考下这个帖子吧
你要是用new的话,那就是C++程序了。
当然我还是建议你用new。比较方便。
密码修改失败请联系微信:mofangbao
发表于 2014-9-26 12:15:41 | 显示全部楼层
lysx 发表于 2014-9-26 09:55
那用new的话,如何释放内存呢

new的话,用delete释放内存…啊请原谅我一直C/C++混用,7楼说的极是。
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-9-26 19:14:09 | 显示全部楼层
ningking1986 发表于 2014-9-26 11:05
错误是因为你申请的是一个一维数组的空间。

http://blog.csdn.net/morewindows/article/details/7664479 ...

谢谢,我去看看!
密码修改失败请联系微信:mofangbao
 楼主| 发表于 2014-9-26 19:14:35 | 显示全部楼层
wkh89 发表于 2014-9-26 12:15
new的话,用delete释放内存…啊请原谅我一直C/C++混用,7楼说的极是。

C语言丢了7年多了。临时拿出来用,好累啊
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表