解除分配成员指针

时间:2015-05-16 04:14:22

标签: c++ pointers memory dynamic heap

#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 ++的新手,所以如果这个问题被打死,我很抱歉,但我似乎无法在网上找到答案。

我想在我班上加入两个指针。一个指向一个字母,另一个指向一组字符。根据我的理解,每次包含新关键字时,都应该在代码中的某个位置附带delete关键字。

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

<。> ./a.out'出错:munmap_chunk():指针无效:0x00007fffcabc5600 *** 中止(核心倾销)

对于我应该谷歌搜索的任何建议/建议将不胜感激。

1 个答案:

答案 0 :(得分:2)

下面

  pointerToPointer = new char[3];
  char y[3] = {'x', 'y', 'z'};
  pointerToPointer = y;

将内存分配给pointerToPointer(第一行),然后使pointerToPointer指向数组y的开头(第三行)。当您尝试删除pointerToPointer时,您实际上会尝试删除指向非动态数组的指针。这会导致段错误,因为运行时会自动释放y的内存,并尝试在析构函数中再次释放它。

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