社区
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()中动态申请内存,主函数中要用到申请的内存,请问在用完后怎样释放?
...全文
41
11
打赏
收藏
微信扫一扫
点击复制链接
分享
下载分享明细
分享
举报
写回复
11 条
回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
指向一个空的
打赏
举报
回复
赞
相关推荐
UWSGI
关于
内存
释放
问题
问题
:实际应用过程中发现UWSGI没有主动
释放
内存
,导致
内存
不断增大。 办法: --evil-reload-on-as 100 --evil-reload-on-rss 100 虚拟
内存
或者实际
内存
大于100M,UWSGI主进程将重启子进程 UWSGI...
java
内存
不
释放
_java无法
内存
释放
的
问题
下面一段截图程序在外部的一个方法中调用new ScreenCut().cutScreen(),截完图后使用Jprofilter测试有4M
内存
无法
释放
,占用对象是dialog,无法
释放
的方法是dialog.setVisible(),很是古怪,4M相当于一个screenImage的大小...
关于
堆区
内存
重复
释放
问题
#include<iostream> using namespace std; // 赋值运算符重载 class Person { public: Person(int age) ... ~Person() // 手动
释放
内存
{ if (m_Age != NULL) { delete m_Age; ...
QTableWidget
内存
释放
问题
之前总感觉类似QTableWidget的控件操作很不方便,没有类似ios的cell复用,应该也是可以自己实现的,今天谈谈QtableWidget的
释放
问题
。 一直担心QTableWidget使用不好会造成
内存
泄漏,所以就研究了一下。 创建的...
openCV
内存
释放
问题
前一天把系统整个重写了一遍,脉络清晰了很多,也终于解决了以前很多崩溃,异常退出的
问题
。...
内存
泄露是说没有
释放
已经不能使用的
内存
,这里一般指堆的
内存
才需要显示的
释放
。比如用malloc,calloc,real
发帖
C语言
微信扫一扫
点击复制链接
分享社区
下载分享明细
6.6w+
社区成员
24.2w+
社区内容
C语言相关问题讨论
社区管理员
加入社区
帖子事件
创建了帖子
2004-01-16 08:46
社区公告
暂无公告