vc中全局指针,在子函数中用new分配的空间,没有调用delete,退出子函数之后就被销毁了 什么原因啊 各位高 20

就是一个定义的全局指针,但是是在函数A中用new分配的内存,我想在函数B中继续引用这片内存,在函数A中我并没有调用delete还销毁这个指针,可是退出函数A后,该指针的内... 就是一个定义的全局指针,但是是在函数A中用new分配的内存,我想在函数B中继续引用这片内存,在函数A中我并没有调用delete还销毁这个指针,可是退出函数A后,该指针的内存就销毁了,求高手指点

定义的是CMap<CString, LPCTSTR, CString, LPCTSTR>*pItemMap;

在函数A中
pItemMap=new CMap<CString, LPCTSTR, CString, LPCTSTR>(iRowNum); //iRowNum是开辟空间的大小
pItemMap- >SetAt(strKey, strValue);

在函数B中再访问pItemMap出现内存访问错误,内存值为0X00000000,

不过将定义改为 CMap<CString, LPCTSTR, CString, LPCTSTR>*pItemMap=new CMap<CString, LPCTSTR, CString, LPCTSTR>(); 后解决了,还是有些不解原因

谢谢热心的 志远823
--------------------------------------------------------------------------
按照你的例子还是不行,不过还是谢谢你
展开
 我来答
志远823
2011-02-19 · TA获得超过2296个赞
知道小有建树答主
回答量:913
采纳率:66%
帮助的人:1179万
展开全部
使用 new 分配的内存是不会被自动销毁,直到程序进程退出或者你调用delete 删除该指针分配的内存.

全局指针被销毁的原因有可能:
1. 你的指针是一个引用计数智能指针,比如boost::shared_ptr, 没人用引用就自动销毁了.
2. 指针没有被销毁,也许你的程序在那里把全局指针重新赋值或者设为NULL了.(这个貌似概率大一些). 实际上这种情况下,原来指针分配的内存已经失去控制(泄漏了),可要仔细调调哦
----------------------------------------------
楼主能否详细说说你怎么发现内存销毁的,最好把代码贴出来我看看
----------------------------------------------
从你的出错来看是访问空指针了.你的全局指针如果没有初始化则是一个野指针通常不为空,如果初始化后又变成空,那肯定是什么地方给删除掉或者直接给空了.这个你好好的检查一下.
此外你的全局指针从代码来看有点问题,我给你个例子吧
在stdafx.cpp里定义
CMap<CString, LPCTSTR, CString, LPCTSTR>*pItemMap;
在stdafx.h里定义
extern CMap<CString, LPCTSTR, CString, LPCTSTR>*pItemMap; // 全局指针
funA()
{
// 注意,如果pItemMap已经被初始化过了,需要先释放再重新初始化,否则内存泄漏
pItemMap=new CMap<CString, LPCTSTR, CString, LPCTSTR>();
}
funB()
{
pItemMap- >SetAt(strKey, strValue);
}
你比对你的代码再看看吧
----------------------------------------------
恩,那的确比较奇怪了,我现在有点怀疑崩溃是不是由于你映射内的字符串指针引起的?
你可以把完整的工程发给我,我看看calmman.yang@163.com
百度网友854e16cef
2011-02-19 · TA获得超过146个赞
知道答主
回答量:112
采纳率:0%
帮助的人:69.5万
展开全部
指针销毁了,其之前指向的内存还在
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ziqiang_lyg
2011-02-23
知道答主
回答量:19
采纳率:0%
帮助的人:3万
展开全部
new CMap<CString, LPCTSTR, CString, LPCTSTR>(iRowNum)
改为new CMap<CString, LPCTSTR, CString, LPCTSTR>[iRowNum]
注:[iRowNum]使用方括号,而不是圆括号
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户36376
2011-03-05 · TA获得超过327个赞
知道答主
回答量:183
采纳率:100%
帮助的人:125万
展开全部
释放函数)的目的就是为了使其能够自动调用释放的类的析构函数。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友96aa8d3
2011-02-19 · TA获得超过433个赞
知道小有建树答主
回答量:2306
采纳率:75%
帮助的人:952万
展开全部
子函数?被调用的啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式