注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mihooke's blog

IT之恋

 
 
 

日志

 
 

char *p=malloc(10);出错  

2014-11-05 10:54:08|  分类: C的一些零碎知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

先说说这条语句涉及到的知识点吧,这条语句目的是声明并定义一个char指针p,并把它赋值为在堆中分配的10个字节的空间的首地址。malloc函数很特别,分配地址成功后,返回的地址为void*,不成功则返回NULLNULL也就是空指针。

但在本条语句中,实现了void* convert to char*,按正常处理来说应该是编译不通过的,但我们在C编译器中却是可以编译通过,由于C++C更严格,所以在C++编译器中时编译不通过的,会出现[Error]invalid conversion from `void*` to `char*`,避免这种出错很简单,只要显式地把malloc分配转换为char*即可。

char *p=malloc(10); #1
static int *w=(int *)malloc(2); #2
int *q; #3
q=malloc(10);

在C++中,#1#2#3都是编译不通过的。

如果char *pstatic修饰符呢?

static char *p=malloc(10);

这又涉及到static特性了,这条语句在CC++编译器中都编译不通过,错误信息是[Error]initializer element is not constant.

初始化元素不是常量,这样问题就明朗了,要知道static变量时放在内存中的静态常量区的。而且系统会去用固定的大小初始化,static必须要用常量区初始化,而malloc则是动态分配空间,所以不能用malloc去初始化了。在C++中编译此语句,则会出现上述两个错误。

  评论这张
 
阅读(41)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017