void * p1;
//char *p2;
//int *p3;
//double * p4;
p1=new double;
delete p1;
vc没有报错也没有警告,但会不会泄漏内存呢?
把 delete p1; 改成 delete (double *)p1; 心理上觉的安全点但翻遍了我能找到的所有书籍上都没有这种先例。更糟糕的是我这样的菜鸟想尽了各种办法也检测不出到底是否漏了。似乎在集成环境下不能检测出?
VC许多方面总是出人意料,真是怕了。不如TC2那么一目了然呀
//char *p2;
//int *p3;
//double * p4;
p1=new double;
delete p1;
vc没有报错也没有警告,但会不会泄漏内存呢?
把 delete p1; 改成 delete (double *)p1; 心理上觉的安全点但翻遍了我能找到的所有书籍上都没有这种先例。更糟糕的是我这样的菜鸟想尽了各种办法也检测不出到底是否漏了。似乎在集成环境下不能检测出?
VC许多方面总是出人意料,真是怕了。不如TC2那么一目了然呀
F:\试验\dlg17\dlg17Dlg.cpp(401) : {80} normal block at 0x00421340, 8 bytes long.
Data: < > CD CD CD CD CD CD CD CD
void * p1;
p1=new double[20];
delete p1;
这样才会有内存泄露的
1.用BoundsChecker工具检测;
2.把可疑的代码段放在一个大点的循环里面反复调用,用windows任务管理器监测内存使用情况,也能发现有没有内存泄漏。你上面的代码用两种方法都没有发现有内存泄漏问题。。
p1=new double;
...
delete p1;如果不是double而是一个自定义的结构体呢?而且不是紧接着new就delete,经过了不知多少行代码,p1的值也换过很多次了甚至又一次被new赋予了一个新的别的类型变量,当最终还是等于原来这个值,delete的时候不会有问题吗?如果不泄漏是由于 new 分配的内存块还有什么不为人知的 属性 保留在程序的某个地方吗?谁有new和delete比较深刻一点的资料啊.
void* AFX_CDECL operator new(size_t nSize, LPCSTR lpszFileName, int nLine)
{
return ::operator new(nSize, _NORMAL_BLOCK, lpszFileName, nLine);
}#if _MSC_VER >= 1200
void AFX_CDECL operator delete(void* pData, LPCSTR /* lpszFileName */,
int /* nLine */)
{
::operator delete(pData);
}
#endif