C语言 指针的释放问题

每天进步一点点 2012-03-07 02:43:26
我要写一个C语言函数,返回值是一个在此函数内部malloc的指针变量,请问这个指针我应该什么时候释放?如何释放?
我想,不可能在函数return前调用free释放,这样返回这个指针就没有意义
可是这个函数返回后,我还能再操作这个指针进行free吗?
...全文
566 39 打赏 收藏 转发到动态 举报
写回复
用AI写文章
39 条回复
切换为时间正序
请发表友善的回复…
发表回复
DaviesX 2012-03-08
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 chemmyhuang 的回复:]

非常感谢你,我问清楚了,我只要把头文件中函数声明为C的函数,而实现用C++,这样就没有问题了,再次谢谢!

引用 36 楼 daviesx 的回复:

引用 35 楼 daviesx 的回复:

引用 33 楼 daviesx 的回复:

编译器不一样, 不知道行不行

你试下先malloc, 然后再调用构造函数, 我用gcc也试下, 可以的话再放贴


不能混合了, ……
[/Quote]

你用的 C++ 编译器吧, 如果有就不用折腾了, malloc 换成 new 就可以了
  • 打赏
  • 举报
回复
非常感谢你,我问清楚了,我只要把头文件中函数声明为C的函数,而实现用C++,这样就没有问题了,再次谢谢!

[Quote=引用 36 楼 daviesx 的回复:]

引用 35 楼 daviesx 的回复:

引用 33 楼 daviesx 的回复:

编译器不一样, 不知道行不行

你试下先malloc, 然后再调用构造函数, 我用gcc也试下, 可以的话再放贴


不能混合了, 构造函数调用不了, 不过你非得要这样的话就吧构造函数做成另一个Initialise的吧

好像也不行, 这样的话要改很多, 派生的时候也要调用Initial……
[/Quote]
天台的故事 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fcmsuck 的回复:]

可以的
[/Quote]
可以的
DaviesX 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 35 楼 daviesx 的回复:]

引用 33 楼 daviesx 的回复:

编译器不一样, 不知道行不行

你试下先malloc, 然后再调用构造函数, 我用gcc也试下, 可以的话再放贴


不能混合了, 构造函数调用不了, 不过你非得要这样的话就吧构造函数做成另一个Initialise的吧
[/Quote]
好像也不行, 这样的话要改很多, 派生的时候也要调用Initialise...
还是用 new 吧
DaviesX 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 daviesx 的回复:]

编译器不一样, 不知道行不行

你试下先malloc, 然后再调用构造函数, 我用gcc也试下, 可以的话再放贴
[/Quote]

不能混合了, 构造函数调用不了, 不过你非得要这样的话就吧构造函数做成另一个Initialise的吧
becky1112 2012-03-07
  • 打赏
  • 举报
回复
用完了就是释放,释放是只是说映射的内存区域归还系统,还得将其至为NULL,否则就会成为野指针了。
DaviesX 2012-03-07
  • 打赏
  • 举报
回复
编译器不一样, 不知道行不行

你试下先malloc, 然后再调用构造函数, 我用gcc也试下, 可以的话再放贴
kason2011 2012-03-07
  • 打赏
  • 举报
回复
关键是记住free释放的是指向的内存区域,而不是指针本身。
wizard_tiger 2012-03-07
  • 打赏
  • 举报
回复
LS都说了,学习一下。
赵4老师 2012-03-07
  • 打赏
  • 举报
回复

malloc和free

fopen和fclose
那样用。
  • 打赏
  • 举报
回复
[Quote=引用 某 楼 mxiaomi 的回复:]

谢谢~现在另一个问题是:
我是要用C语言写一段程序,调用别人用C++写的一个库中的函数,需要分配内存指向库中某个类的对象,这样是用malloc吗?以前写C++程序新建对象都是用new,第一次遇到这种情况,有些迷惑了
举例说,别人库中有class A
如果我是写C++函数,那我知道,我应该用A* a = new A;
现在是用C语言,是应该这样吗:A* a = malloc(sizeof(A));
[/Quote]
这样有些问题哎,你直接用c++好了,为什么要用c呢?
c没有class,你的A怎么声明的?sizeof(A)又等于多少?
struct c和c++也不一样的
m筱米 2012-03-07
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 mxiaomi 的回复:]

参考:
#include<stdio.h>
#include <stdlib.h>

char* getvalue(char *q)
{
q=(char*)malloc(sizeof(char));
return q;
}
void main()
{
char *p;//类型修改了
p = getvalue(p);//调用
printf("%d",*p);
free(p);//释放
……
[/Quote]
第一次的有问题哦~~
m筱米 2012-03-07
  • 打赏
  • 举报
回复
参考:
#include<stdio.h>
#include <stdlib.h>

char* getvalue(char *q)
{
q=(char*)malloc(sizeof(char));
return q;
}
void main()
{
int *p;
p = getvalue(p);//调用
printf("%d",*p);
free(p);//释放
}
  • 打赏
  • 举报
回复
还有混合的方法?

[Quote=引用 24 楼 daviesx 的回复:]

=,= ! 一定要纯c吗 ?
[/Quote]
银歪月 2012-03-07
  • 打赏
  • 举报
回复
DaviesX 2012-03-07
  • 打赏
  • 举报
回复
=,= ! 一定要纯c吗 ?
  • 打赏
  • 举报
回复
对,是这样的。那我用C语言怎么去新建那个类的对象?new好像是只能用在C++中?

[Quote=引用 22 楼 daviesx 的回复:]

不一样, new 一个对象的时候还会调用对象的构造函数, delete 就调用析构函数, 而 malloc 跟 free 则仅仅是分配和释放内存
[/Quote]
DaviesX 2012-03-07
  • 打赏
  • 举报
回复
不一样, new 一个对象的时候还会调用对象的构造函数, delete 就调用析构函数, 而 malloc 跟 free 则仅仅是分配和释放内存
  • 打赏
  • 举报
回复
谢谢~现在另一个问题是:
我是要用C语言写一段程序,调用别人用C++写的一个库中的函数,需要分配内存指向库中某个类的对象,这样是用malloc吗?以前写C++程序新建对象都是用new,第一次遇到这种情况,有些迷惑了
举例说,别人库中有class A
如果我是写C++函数,那我知道,我应该用A* a = new A;
现在是用C语言,是应该这样吗:A* a = malloc(sizeof(A));

[Quote=引用 19 楼 daviesx 的回复:]

引用 18 楼 chemmyhuang 的回复:

谢谢你详细的解释,我应该明白了。
现在我的作法是,从我写的A()返回的指针char*a再作为入参传到B()中,在B()中令char* b = a,然后free (b)就可以了,是这样吗?

引用 14 楼 daviesx 的回复:

引用 5 楼 chemmyhuang 的回复:

你是说这个函数返回后我还可以再操作这个指针进……
[/Quote]
DaviesX 2012-03-07
  • 打赏
  • 举报
回复
说错了, 不在一个模块都可以 =,=!
加载更多回复(19)

69,382

社区成员

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

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