相关疑难解决方法(0)

删除[]是否等于删除?

IP_ADAPTER_INFO *ptr=new IP_ADAPTER_INFO[100];
Run Code Online (Sandbox Code Playgroud)

如果我免费使用

delete ptr;
Run Code Online (Sandbox Code Playgroud)

它会导致内存泄漏,如果不是那么为什么?

这是VS2005生成的反汇编代码

; delete ptr;
0041351D  mov         eax,dword ptr [ptr] 
00413520  mov         dword ptr [ebp-0ECh],eax 
00413526  mov         ecx,dword ptr [ebp-0ECh] 
0041352C  push        ecx  
0041352D  call        operator delete (4111DBh) 
00413532  add         esp,4 

; delete []ptr;
00413535  mov         eax,dword ptr [ptr] 
00413538  mov         dword ptr [ebp-0E0h],eax 
0041353E  mov         ecx,dword ptr [ebp-0E0h] 
00413544  push        ecx  
00413545  call        operator delete[] (4111E5h) 
0041354A  add         esp,4 
Run Code Online (Sandbox Code Playgroud)

c++ memory-management pod

44
推荐指数
5
解决办法
1万
查看次数

C++ Memory Leak,找不到哪里

我正在使用Visual Studio 2008,开发一个OpenGL窗口.我创建了几个用于创建骨架的类,一个用于关节,一个用于皮肤,一个用于Body(用于多个关节和皮肤),另一个用于读取一个skel/skin文件.

在我的每个类中,我使用指针来处理我的大部分数据,其中大多数是使用= new int [XX]声明的.我使用delete [XX]为每个删除指针的类都有一个析构函数.

在我的GLUT显示功能中,我让它声明一个正文,打开文件并绘制它们,然后删除显示结尾处的正文.但是程序中某处仍然存在内存泄漏.随着时间的推移,它的内存使用量会以一致的速度不断增加,我将其解释为不被删除的内容.

我不确定它是否在过度显示功能中只是不删除Body类或其他东西.我已经按照Visual Studio 2008中的内存泄漏检测步骤进行了操作,它没有报告任何泄漏,但我不能100%确定它是否适合我.我不会精通C++,所以我可能会忽略一些东西,有人能看到它吗?

从主要:

void display(void){
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    Body *body = new Body();
    body->readSkel("C:\\skel2.skel");
    body->drawBody();
    body = new Body();
    body->readSkel("C:\\skel1.skel");
    body->drawBody();
    glutSwapBuffers();  
    body->~Body();
    delete body;
}
Run Code Online (Sandbox Code Playgroud)

来自身体:

Body::Body(){
    skelFile = string();
    skinFile = string();
    totalJoints = 0;
    joints = new Joint[25];
    skin = new Skin;
}

Body::~Body(){
    delete[25] joints;
    delete skin; 
}
Run Code Online (Sandbox Code Playgroud)

c++ opengl memory-leaks memory-management freeglut

0
推荐指数
1
解决办法
1895
查看次数

标签 统计

c++ ×2

memory-management ×2

freeglut ×1

memory-leaks ×1

opengl ×1

pod ×1