社区
C语言
帖子详情
关于内存释放的问题
myyan
2004-01-16 08:46:47
char *init()
{
char *p=(char *)malloc(52*4*sizeof(char));
......
return p
}
void main()
{
char (*Arr)[4];
Arr=init();
}
在init()中动态申请内存,主函数中要用到申请的内存,请问在用完后怎样释放?
...全文
100
11
打赏
收藏
关于内存释放的问题
char *init() { char *p=(char *)malloc(52*4*sizeof(char)); ...... return p } void main() { char (*Arr)[4]; Arr=init(); } 在init()中动态申请内存,主函数中要用到申请的内存,请问在用完后怎样释放?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ccwwcsdnc
2004-01-16
打赏
举报
回复
这样做:
main ()
{ float **f=NULL;
f = alloc2float(80,60); //申请二维数组f[60][80],注意参数次序;
if(f==NULL){ printf("alloctet error!\n"); exit(); }
.....
free2float(f);
}
/* allocate a 2-d array of floats */
float **alloc2float(size_t n1, size_t n2)
{
return (float**)alloc2(n1,n2,sizeof(float));
}
/* free a 2-d array of floats */
void free2float(float **p)
{
free2((void**)p);
}
/* allocate a 2-d array */
void **alloc2 (size_t n1, size_t n2, size_t size)
{
size_t i2;
void **p;
if ((p=(void**)malloc(n2*sizeof(void*)))==NULL)
return NULL;
if ((p[0]=(void*)malloc(n2*n1*size))==NULL) {
free(p);
return NULL;
}
for (i2=0; i2<n2; i2++)
p[i2] = (char*)p[0]+size*n1*i2;
return p;
}
/* free a 2-d array */
void free2 (void **p)
{
free(p[0]); //释放时,一维一维的释放,与申请时的次序相反。
free(p);
}
aph
2004-01-16
打赏
举报
回复
char (*Arr)[4];
Arr[0] = init();
free(Arr[0]);
应该这样吧!
myyan
2004-01-16
打赏
举报
回复
就这样吧。
本来我用栈内存分配,函数结束后就没有了,每次都是乱码,可能是栈内存释放后容易被抹掉,或者栈内存释放后又变回原来的值了。而堆内存不容易去掉,尤其是大内存的机器,要等用到的时候才能抹掉。
weimj
2004-01-16
打赏
举报
回复
free就释放了,一时还可以用也很正常,因为free并没有把数据抹掉,只是标志内存可以再次被分配.
格兰特杨
2004-01-16
打赏
举报
回复
要不然这样,但不确定。实际上free后是可能取到数据的,除非在free前用memset清零。
char (*Arr)[4];
Arr=init();
for (i = 0; i< 52; i++)
{
free Arr[i];
}
建议你把Arr声明成 char **Arr可能会好些。
big_d
2004-01-16
打赏
举报
回复
free(Arr);
Arr=NULL;
myyan
2004-01-16
打赏
举报
回复
我想创建的是二维数组,使用Arr指向函数中的内存,本来觉得以为可以释放掉,但是
释放后通过指针还可以取到数据。不知道有没有释放成功。
格兰特杨
2004-01-16
打赏
举报
回复
这里声明成Arr为指向char数组的指针...。//而不是char指针的数组。
根据怎样申请就怎样释放的原则,不适用delete,直接free(Arr)我觉得就可以!
讨论!
dddd8888
2004-01-16
打赏
举报
回复
你这样写就不对
victor_cui
2004-01-16
打赏
举报
回复
free(Arr)即可
workhand
2004-01-16
打赏
举报
回复
指向一个空的
内存
泄露Demo leaky app
内存
泄露Demo leaky app
C/C++指针经典资料大全
C/C++指针经典资料大全,十余部经典资料书籍,是您精通C指针的理想教程。
关于堆
内存
和栈
内存
释放
js 中的
内存
分为堆
内存
和 栈
内存
堆
内存
:存储引用类型值 (对象:键值对 函数:代码字符串) 栈
内存
: 提供JS代码执行的环境和存储基本类型值 堆
内存
释放
让所有引用堆
内存
空间地址的变量赋值给Null 即可 (没有变量占用这个堆
内存
了 浏览器会在空间的时候把它
释放
掉) 栈
内存
释放
一般情况下,当函数执行完成,所形成的私有作用域(栈
内存
)都会自动
释放
掉 (在栈
内存
中存储的值也都会被
释放
掉,但...
【OpenCV】有关
内存
释放
的一些
问题
转载请注明出处:http://blog.csdn.net/xiaowei_cqu/article/details/7586847 前一天把系统整个重写了一遍,脉络清晰了很多,也终于解决了以前很多崩溃,异常退出的
问题
。这里小小总结一下自己遇到的麻烦。 1、
内存
泄露
内存
泄露是说没有
释放
已经不能使用的
内存
,这里一般指堆的
内存
才需要显示的
释放
。比如用malloc,calloc,realloc,ne
map的
内存
释放
map在erase和clear后是否会马上
释放
内存
参考链接:关于c++中map的
内存
占用
问题
(原文)原文提到map在erase和clear后不会立马
释放
内存
,而是采用类似
内存
池的机制,对申请的
内存
进行”预留“,在一段时间内不使用才会予以“
释放
”。 (在编译器MSVC1930的实际测试中)大
内存
空间在erase和clear后会立马
释放
(猜测)小
内存
空间在erase和clear后会被
内存
池回收 delete+erase:编译器M
C语言
70,040
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章