解除分配成员指针 #包括 使用名称空间std; 类myClass{ 公众: 字符*指针; 字符*指针指针; myClass(){ 指针=新字符; char x='x'; 指针=&x; pointerToPointer=新字符[3]; 字符y[3]={'x','y','z'}; 指针指针=y; } ~myClass(){ 删除指针; 删除[]指针指针指针; }}; int main(){ myClass myClass; 返回0; } 我对C++是新的,所以我道歉如果这个问题被打到死,但我似乎找不到在线答案。

解除分配成员指针 #包括 使用名称空间std; 类myClass{ 公众: 字符*指针; 字符*指针指针; myClass(){ 指针=新字符; char x='x'; 指针=&x; pointerToPointer=新字符[3]; 字符y[3]={'x','y','z'}; 指针指针=y; } ~myClass(){ 删除指针; 删除[]指针指针指针; }}; int main(){ myClass myClass; 返回0; } 我对C++是新的,所以我道歉如果这个问题被打到死,但我似乎找不到在线答案。,c++,pointers,memory,dynamic,heap,C++,Pointers,Memory,Dynamic,Heap,我试图在课堂上包括两个指针。一个指向单个字母,另一个指向字符数组。据我所知,每次包含new关键字时,代码中的某个点都应该伴随delete关键字 我已经包含了一个析构函数,它应该释放分配给这些指针的内存,但是当程序终止时在主函数中调用它时,我就剩下了: “./a.out”中出错:munmap_chunk():无效指针:0x00007fffcabc5600*** 中止(堆芯转储) 如果您对我应该在谷歌上搜索的内容有任何建议,我将不胜感激 以下 #include <iostream> u

我试图在课堂上包括两个指针。一个指向单个字母,另一个指向字符数组。据我所知,每次包含new关键字时,代码中的某个点都应该伴随delete关键字

我已经包含了一个析构函数,它应该释放分配给这些指针的内存,但是当程序终止时在主函数中调用它时,我就剩下了:

“./a.out”中出错:munmap_chunk():无效指针:0x00007fffcabc5600*** 中止(堆芯转储)

如果您对我应该在谷歌上搜索的内容有任何建议,我将不胜感激

以下

#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;
}
将内存分配给
pointerToPointer
(第一行),然后使
pointerToPointer
指向数组的开头
y
(第三行)。当您尝试删除
指针指针指针
时,实际上是尝试删除指向非动态数组的指针。这会导致segfault,因为运行时会自动释放
y
的内存,并且您尝试在析构函数中再次释放它


在任何情况下,都应小心地将指针切换到其他内存位置,因为如果您忘记释放初始分配的内存(在您的情况下为
新字符[3]
),可能会导致内存泄漏。

非常感谢!我又浪费了一个小时的时间。总有一天我会一劳永逸地解决这个问题。
  pointerToPointer = new char[3];
  char y[3] = {'x', 'y', 'z'};
  pointerToPointer = y;