当前位置:  技术问答>linux和unix

如果释放动态内存多于当初分配的数目,积少成多会造成程序崩溃吗?

    来源: 互联网  发布时间:2016-05-28

    本文导语:  各位高人,我在linux环境下用c++开发,碰到了一个奇怪的现象:我本意是让某个子进程在无限循环作某项功能,但我发现在此子进程在循环了两万次左右就莫名其妙的不再循环下去,试了好多次都是到20000次左右就出...

各位高人,我在linux环境下用c++开发,碰到了一个奇怪的现象:我本意是让某个子进程在无限循环作某项功能,但我发现在此子进程在循环了两万次左右就莫名其妙的不再循环下去,试了好多次都是到20000次左右就出现这种情况,后来我发现这个子进程中的某个函数之内用new给指针p分配了动态内存: p = new char[1],注意只分配一个字节的内存!!!但是却在函数之外释放:delete[]p,(我确定在delete之后加了[]!), 但我发现在eclipse环境下debug查看,本应该只释放当初非配的一个字节内容, 但我发现在eclipse环境下debug查看,却发现和这1个字节相邻的后三个字节内容全部被修改为0x00,既多删除了动态内存!!我想请问:这种情况累计几万次,会不会就是造成调用此函数的子进程莫名其妙的不再无限循环的原因?(当然这个函数在内部new,却外部delete,不好,这个就不讨论了,只想问累计多删除动态内存就有可能会造成崩溃吗? 注意是有可能!)

|
我的意思是:藐视你的消息队列处理有问题?

|
你这个程序应该是new申请的空间把内存占用完了
new函数抛出异常。

|
弱弱的提一个小问题

char *p = NULL;
funct(p);
delete [] p;
你只用指针形参。。。 p不还是NULL?

|
你的程序是錯的,有隱含的BUG!

char *p =0;    /* 這裡定義一個char類型的指針,沒錯吧?並且指針初始化為空 */

/*
 * 這個函數是出錯的地方。函數的參數傳遞只有兩種形式:傳值和傳引用。傳指針實際上也是一種傳值調用。
 * 實際的調用過程是這樣的,先傳個p給funct(),然後會產生一個p的副本,假如是pp,然後分配的那一個char
 * 空間實際是那個pp指向的,而不是p指向的。這樣當funct()返回了以後,p裏面依然是NULL,所以相當於你
 * delete了一個空指針,並且你在funct()裏面分配的內存也洩露了...
 */
funct(p);
。。。//使用完后delete[]
delete[] p;//我发现和p相邻的后三个字节内容全部被修改为0x00!!! 

你看下麵這個測試代碼:

#include 

void func(char* p)
{
p = new char[1];
}

int main()
{
char* ptr = NULL;
std::cout 

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux/Centos/Ubuntu清除系统缓存释放内存命令介绍
  • memset分配的空间用完以后需要进行释放吗? 如果需要释放,怎么释放呢? ---阿菜
  • 关于无名管道释放后,inode节点释放的问题
  • 请问:我发现端口一旦被绑定后就无法释放出来,除非服务器端退出,有没有主动释放端口的办法啊?
  • 应用层malloc内存后,再free的话,内存不释放,而是在exit时释放,这个谁知道是怎么回事?
  • 用ftok获取的内核对象不需要释放吗?
  • Solaris上内存释放问题
  • sqlite3的内存释放问题。
  • 关于子进程中释放内存的问题!!?高手请进
  • 如何释放一个内存空间?
  • 关于释放内存
  • 监听端口异常退出后如何马上释放端口
  • ctrl+c会自动释放资源?
  • 我想动态申请一块内存,然后在释放这块内存,应该怎么做,在线等!
  • 如何在程序中释放特定文件缓冲区占用的内存:急!!!
  • 释放压缩TAR包,急,在线等
  • 请教高手如何释放内存
  • GTK+中类似gtk_hbox_new这样的给构件分配内存的函数 为什么不用手动释放?
  • 怎样释放服务端口??? 急:在线等待
  • 线程的资源释放
  • 连接池不能释放,


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3