社区
非技术区
帖子详情
关于动态指针(C语言)
hnjiangxd
2002-01-20 06:43:11
一个全局的指针.
在一个函数a的开头申请空间,结尾释放.
好像没什么问题.
但是不幸的是此函数调用了另一个函数b,b函数也给这个指针申请了空间,并在结束的时候释放.
请高手讲解一下可能出现的后果--主要讲讲原因,谢谢.
...全文
121
9
打赏
收藏
关于动态指针(C语言)
一个全局的指针. 在一个函数a的开头申请空间,结尾释放. 好像没什么问题. 但是不幸的是此函数调用了另一个函数b,b函数也给这个指针申请了空间,并在结束的时候释放. 请高手讲解一下可能出现的后果--主要讲讲原因,谢谢.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ssyqcwj
2002-01-22
打赏
举报
回复
二次申请造成内存浪费。在b中申请与释放没有错误但是返回a中时因为在B中申请的内存已经释放而你在A中又释放一次这就造成了释放不存在的内存了后里是造成系统崩溃。
tpProgramer
2002-01-21
打赏
举报
回复
tigermount(智者爱山,仁者爱水) :
你象下面这样写是不是有些问题?
void a()
{
int *p=new int;
b();
delete []p;
}
这个时候,因为b函数中重新给p分配了空间,所以 p的指向已经变了,而且已经在b函数中释放,所以当b函数返回时,p其实已经是释放过的指针了。你可以这样修改你的程序:
void a()
{
int *p=new int;
int *q =p
b();
delete q; //此处不能使用 delete [], 因为你new的形式和delete的形式要一致!
}
不过,我上面的程序也有地方要修改,修改如下:
全局:
long *p=NULL;
在a中:
if(p)
{
delete p;
p = NULL; //新加上的!!
}
p = new long;
在b中:
if(p)
{
delete p;
p = NULL; //新加上的!!
}
p = new p;
tpProgramer
2002-01-21
打赏
举报
回复
这个不能一概而论;
对全局指针,有一些特殊地地方,不如可以赋初值;
于是,是否有内存泄漏就跟每个人的程序书写有关了:
全局:
long *p=NULL;
在a中:
if(p)
delete p;
p = new long;
在b中:
if(p)
delete p;
p = new p;
这样,不论a和b谁先调用,都不会造成内存泄漏。因为new 和delete成对出现
tigermount
2002-01-20
打赏
举报
回复
我认为此中情况不是很常见,例如:
void b();
void a()
{
int *p=new int;
b();
delete []p;
}
void b()
{
int *p=new int;
....
delete [] p;
}
所以b所申请的空间已经释放。
bugbugbug
2002-01-20
打赏
举报
回复
设全局指针为p
在a中:
p=new yourmemorya;后p就指向了你新建的yourmomorya对象,这个对象需要一定的存储空间。
在b中:
p = new yourmemoryb;后你就无法找到yourmemorya对象了,因为指向它的指针已被你重新互致了,这造成了内存泄漏。
如果你在程序中大量的调用a, 这可能会造成程序执行速度变慢。。。。。。
Francky
2002-01-20
打赏
举报
回复
在b函数中给全局指针,赋值。此时在a中早请的内存,你就没法获取它的地址了。这样程序只有退出时,这块内存才会被系统回收。如果这个程序运行时间长点的话,系统内存会不够,程序有可能会 coredump ,这就所谓的内存泄漏。
hnjiangxd
2002-01-20
打赏
举报
回复
谢谢,结果我也知道.
想知道具体的过程--呵呵,越详细越好.
birdinfly
2002-01-20
打赏
举报
回复
同意楼上
hello_wyq
2002-01-20
打赏
举报
回复
内存泄漏和程序有可能crack掉!
免费下载:
C语言
难点分析整理.doc
通过使用
指针
和
动态
内存分配,可以在运行时
动态
增加数组的大小。这通常涉及到重分配更大的内存块并将原有内容复制过去。 ### 11.
C语言
中的位运算 位运算符允许对整数进行按位操作,如按位与、按位或、按位异或等。...
62套
C语言
小游戏源码
C语言
提供了
动态
内存分配(如malloc和free)的功能。在小游戏源码中,可能涉及内存分配来创建对象或数据结构,这有助于理解内存管理的重要性。 4. **输入输出操作** 游戏通常需要用户输入和屏幕输出,
C语言
中的...
C语言
实战105例
4. **
指针
**:
C语言
的精髓之一,
指针
能直接操作内存,例子将讲解
指针
的声明、初始化、解引用,以及通过
指针
进行数组和函数操作。 5. **结构体**:结构体允许我们组合多种数据类型,形成复杂的数据结构,例子会包含...
C语言
精彩编程100例
指针
在
动态
内存分配(malloc, free)和数据结构(如链表)中也有广泛应用。 结构体是
C语言
中组合多种类型数据的方式,它允许创建自定义的数据类型。学习如何定义结构体,声明结构体变量,以及如何通过
指针
操作...
C语言
实例解析精粹
这本书涵盖了
C语言
的基础概念、语法结构、数据类型、控制结构、函数、
指针
、内存管理等多个核心主题,并通过丰富的实例解析来深化理解。 在
C语言
的学习过程中,了解和掌握基本语法是第一步。
C语言
是一种静态类型的...
非技术区
15,446
社区成员
58,119
社区内容
发帖
与我相关
我的任务
非技术区
C/C++ 非技术区
复制链接
扫一扫
分享
社区描述
C/C++ 非技术区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章