求解 内存分配(Memory Allocate) 问题

跪求高手解惑,小菜鸟在此谢过!(在VC++6.0的Win32ConsoleApplication下)1)malloc.h这个头文件除了malloc()函数,里面还包含re... 跪求高手解惑,小菜鸟在此谢过!(在VC++6.0的Win32 Console Application下)
1)malloc.h这个头文件除了malloc()函数,里面还包含realloc() calloc()这几个函数吗?
2)在某次编程实践我关于 分配200字节(或25块整形空间)写了三种形式:
int *p1 = (int *) malloc( 200 ); //VC++6.0环境下int占4字节,此行相当于分配25块int空间
int *p2 = (int *) calloc( 25, sizeof( int ) ); //直接分配25块int空间

int *p3 = (int *) malloc( sizeof( int ) ); //先分配1块整形空间
p3 = (int *)realloc( p3, 200 ); /* 再用realloc函数把一块整形空间改换成200字节空间,
即:把一块整形空间改换成25块整形空间(VC++6.0编译环境) */
请 众多高手 帮我解惑:我的这三种写法逻辑上对吗,如果不对应该怎么改?(暂不考虑内存安全问题)

我的意思是malloc函数与realloc函数还有calloc函数有什么异同点?

3)关于同一段动态分配内存重复释放的问题:
我在A函数分配了一段内存:
int *p = (int *) malloc( sizeof( int ) );
现在&p作为实参传递进入B函数,进行了一些操作,完事以后在B函数将指针变量p指向的空间free掉了,但是由于粗心,在B函数执行完成后返回A函数又执行了一次free(p);

这个程序执行时显示“××.exe已停止工作”(环境是Win7旗舰版SP1),这个是程序自己执行的时候出了问题,还是被操作系统做掉了?

以上问题在线跪求高手解答,谢过!
展开
 我来答
做个多愁善感的人bt
2013-08-07 · TA获得超过194个赞
知道答主
回答量:69
采纳率:0%
帮助的人:62.8万
展开全部
1 include stdlib.h instead
2 calloc 分配m个n字节的内存空间,该内存空间被置0
malloc 分配制定直接长内存空间,空间内容未置0
realloc 中如果第一个指针为NULL,等效malloc,如果第一个指针不为空,但是size=0,等效free,指针
,大小都不为0则重新根据内存分配算法挑选合适内存
3 double free 是有可能造成core dump的,free 后置NULL即可,即使free(NULL)也不会出问题,
if(NULL!=p){free(p);p=NULL;} a better way !!!
追问
高手,这三个函数原型是什么,我想看看参数列表
追答
1 void *calloc(size_t nmemb,size_t size);
2 void *malloc(size_t size);
3 void free(void*ptr);
4 void *realloc(void*ptr,size_t size);
中智咨询
2024-08-28 广告
在当今竞争激烈的商业环境中,企业需要不断提高自身的竞争力,以保持市场份额和增加利润。通过人效提升,企业可以更有效地利用有限的资源,提高生产力和效益,从而实现盈利目标。中智咨询提供全方位的组织人效评价与诊断、人效提升方案等数据和管理咨询服务。... 点击进入详情页
本回答由中智咨询提供
金色潜鸟
2013-08-07 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5769万
展开全部
1)malloc.h 是的,VC 6.0 用 #include <stdlib.h> 就可以了。
2)写法都对。用 malloc 或 calloc 与个人习惯 有关(各人喜欢,c语言历史有这2函数)。realloc 用于 随时可以 增加 动态分配 或 减小 动态分配 空间。另2个函数无此功能。
3) 加条件判断做释放: if ( p) free(p);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式