C语言中内存分配问题!

C语言中有3个内存分配的函数void*realloc(void*ptr,unsignednewsize);void*malloc(unsignedsize);void*c... C语言中有3个 内存分配的函数
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);
void* calloc(size_t nelem, size_t elsize);
如果我在自己的自定义函数中使用上面的3个函数(其中一个)分配内存。那么当我的自定义函数调用结束时

如:
#include<stdio.h>
int *aa(void);
int main()
{
int *p;
p=aa();
*p=111;
printf("%d",*p);
getch(); return 0;
}
int *aa(void)
{
return (int *)malloc(sizeof(int));
}

经过测试 malloc() 分配的空间并没有随着 aa()的调用结束 而消失. 这样是正确的么?
这样会有什么不良影响么?
另外一个问题:
一个自定义的函数返回 “指针" 有什么用? 我觉得没多大用啊。
因为在函数内除了用 上面这3个内存分配函数创建的空间能在函数调用结束之后 保存。还有就是在参数中使用指针,可以在函数内改变其他的内存地址中的值。
除此之外,其他在函数体内创建的变量、指针都会在调用结束后消失的。
总结
函数返回指针类型的值:
1:在函数体内用到了
void* realloc(void* ptr, unsigned newsize);
void* malloc(unsigned size);
void* calloc(size_t nelem, size_t elsize);
这3个函数 因为还需要在 main() 中或其他函数中使用而返回!
对于返回指针的情况就这一种了!
使用到指针的情况还有一种:4
1:在函数参数中使用 -------用 形参 改变 实参中的值!
经我总结以上几点是指针和函数使用的极限了.
各位大神 对不对?
展开
 我来答
爱说真话的小丑
2015-02-27 · TA获得超过943个赞
知道小有建树答主
回答量:866
采纳率:0%
帮助的人:285万
展开全部
堆上分配的内存(malloc、calloc 等)不会随函数的调用结束(超出作用域)而释放,必须使用函数 free 释放,否则程序运行时会产生内存泄漏。
指针是指向一块内存的首地址,这块内存可以类比作生活中的一个容器,如箱子,箱子内可以放一些物品(相当于内存中的数据),指针是指示这个箱子的位置。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式