释放成员指针
Deallocating member pointer
#include <iostream>
using namespace std;
class myClass{
public:
char * pointer;
char * pointerToPointer;
myClass(){
pointer = new char;
char x = 'x';
pointer = &x;
pointerToPointer = new char[3];
char y[3] = {'x', 'y', 'z'};
pointerToPointer = y;
}
~myClass(){
delete pointer;
delete[] pointerToPointer;
}};
int main(){
myClass myclass;
return 0;
}
我是c++新手,这个问题被打死还请见谅,网上好像找不到答案。
我试图在我的 class 中包含两个指针。一个指向单个字母,另一个指向一个字符数组。据我了解,每次包含 new 关键字时,它都应该在代码中的某个位置伴随 delete 关键字。
我已经包含了一个析构函数,它应该释放分配给这些指针的内存,但是当它在程序终止时在主函数中被调用时,我留下了:
`./a.out' 中的错误:munmap_chunk():无效指针:0x00007fffcabc5600 ***
已中止(核心已转储)
任何关于我应该谷歌搜索的建议/建议将不胜感激。
低于
pointerToPointer = new char[3];
char y[3] = {'x', 'y', 'z'};
pointerToPointer = y;
你分配内存给pointerToPointer
(第一行),然后让pointerToPointer
指向数组的开头y
(第三行)。当您尝试删除 pointerToPointer
时,您实际上是在尝试删除指向非动态数组的指针。这会导致段错误,因为 y
的内存由运行时自动释放,您尝试在析构函数中再次释放它。
在任何情况下,将指针切换到指向其他内存位置时都应该小心,因为如果您忘记释放初始分配的内存(new char[3]
在您的情况下,它可能会造成内存泄漏).
#include <iostream>
using namespace std;
class myClass{
public:
char * pointer;
char * pointerToPointer;
myClass(){
pointer = new char;
char x = 'x';
pointer = &x;
pointerToPointer = new char[3];
char y[3] = {'x', 'y', 'z'};
pointerToPointer = y;
}
~myClass(){
delete pointer;
delete[] pointerToPointer;
}};
int main(){
myClass myclass;
return 0;
}
我是c++新手,这个问题被打死还请见谅,网上好像找不到答案。
我试图在我的 class 中包含两个指针。一个指向单个字母,另一个指向一个字符数组。据我了解,每次包含 new 关键字时,它都应该在代码中的某个位置伴随 delete 关键字。
我已经包含了一个析构函数,它应该释放分配给这些指针的内存,但是当它在程序终止时在主函数中被调用时,我留下了:
`./a.out' 中的错误:munmap_chunk():无效指针:0x00007fffcabc5600 *** 已中止(核心已转储)
任何关于我应该谷歌搜索的建议/建议将不胜感激。
低于
pointerToPointer = new char[3];
char y[3] = {'x', 'y', 'z'};
pointerToPointer = y;
你分配内存给pointerToPointer
(第一行),然后让pointerToPointer
指向数组的开头y
(第三行)。当您尝试删除 pointerToPointer
时,您实际上是在尝试删除指向非动态数组的指针。这会导致段错误,因为 y
的内存由运行时自动释放,您尝试在析构函数中再次释放它。
在任何情况下,将指针切换到指向其他内存位置时都应该小心,因为如果您忘记释放初始分配的内存(new char[3]
在您的情况下,它可能会造成内存泄漏).