关于判断malloc申请内存是否成功的问题?

Crazy_hand 2011-01-27 08:42:08
想知道大家都是怎么处理的?
如果在没有成功的时候返回NULL,
那如果这个函数需要在返回其它类型的数据时应该怎么办啊?
...全文
3513 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
g_xing87 2011-01-27
  • 打赏
  • 举报
回复
不过这里还是推荐使用calloc来动态分配内存,比malloc更加安全
wizard_tiger 2011-01-27
  • 打赏
  • 举报
回复
函数名称: malloc
函数原型: void * malloc(unsigned size);
函数功能: 分配size字节的存储区
函数返回: 所分配的内存区地址,如果内存不够,返回0
所属文件: <stdlib.h>
返回其它类型用强制转换,
如:
(int *)malloc(4*sizeof(int));
赵4老师 2011-01-27
  • 打赏
  • 举报
回复
void *malloc( size_t size );
人家返回的类型是void *
你想当什么类型的指针用就将它强制转换。比如
struct SOMETYPE *p;
p=(struct SOMETYPE *)malloc( sizeof(struct SOMETYPE) );//分配一个struct SOMETYPE
if (NULL==p) {
//失败
} else {
//成功
}
xzlcc 2011-01-27
  • 打赏
  • 举报
回复
malloc 只能返回指针 可以是任意类型数据的指针 int * char * 等等
欣客 2011-01-27
  • 打赏
  • 举报
回复

TYPE *p = NULL;

if (NULL != (p = (TYPE *)malloc(size)) )
{
//正常情况,申请成功
}
else
{
return 你要的数据类型。
}


AnYidan 2011-01-27
  • 打赏
  • 举报
回复
没有明白 “那如果这个函数需要在返回其它类型的数据时应该怎么办啊?”
这个函数是封装好的库函数,如果它返回一个 int 应该是compiler 出问题了
NowDoIT 2011-01-27
  • 打赏
  • 举报
回复
函数原型:
extern void *malloc(unsigned int num_bytes);
如果失败返回NULL,如果成功的话;
“需要什么类型就强制转换为什么类型”!
比如,需要char*型,char *s = (char*)malloc(sizeof(char)*N);
需要int*型 int *i = (int*)malloc(sizeof(int)*N);
需要struct型, struct tm *time1 = (struct tm*)malloc(sizeof(struct tm)*N);
yong_f 2011-01-27
  • 打赏
  • 举报
回复
返回其它类型的数据什么意思?
malloc函数返回类型时void *, 只会是一个合法的指针或者NULL指针


TYPE *p = NULL;

if ((p = (TYPE *)malloc(size)) != NULL)//强制类型转换(TYPE*)
{
//正常情况,申请成功
}
else
{
//这里处理未申请成功的情况
}
pang123hui 2011-01-27
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 athenacle_ 的回复:]
引用 13 楼 g_xing87 的回复:

不过这里还是推荐使用calloc来动态分配内存,比malloc更加安全


calloc在内部还是调用了malloc函数。
然后搞不好在malloc之后又用了个memset
[/Quote]

呵呵,有可能吧,不过还是用calloc吧,简洁
shjnba 2011-01-27
  • 打赏
  • 举报
回复
如需要返回其它类型数据,那就强行转换数据类型。
Athenacle_ 2011-01-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 g_xing87 的回复:]

不过这里还是推荐使用calloc来动态分配内存,比malloc更加安全
[/Quote]

calloc在内部还是调用了malloc函数。
然后搞不好在malloc之后又用了个memset
gql1123 2011-01-27
  • 打赏
  • 举报
回复
pp:

char *x = (char *)malloc(100);
if(!x)
return ERROR;
...
...
...




fresh_han 2011-01-27
  • 打赏
  • 举报
回复
malloc返回类型是void *。分配成功时返回指向分配空间的指针,是void ×型的。分配不成功返回NULL,这时需要自己在程序里作出相应处理。
we_sky2008 2011-01-27
  • 打赏
  • 举报
回复

返回其它类型的数据什么意思?
malloc函数返回类型时void *, 只会是一个合法的指针或者NULL指针


TYPE *p = NULL;

if ((p = (TYPE *)malloc(size)) != NULL)
{
//正常情况,申请成功
}
else
{
//这里处理未申请成功的情况
}
flysnowhite 2011-01-27
  • 打赏
  • 举报
回复
返回值为NULL,表示内存分配不成功,这时只能自己想办法,一般程序终止。
不为NLL,表示分配正常,程序继续向下运行。
Trinx 2011-01-27
  • 打赏
  • 举报
回复
判断返回值是NULL时,你自己做处理就行了。

70,020

社区成员

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

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