c++ - 要释放动态数组初始化时程序崩溃

标签 c++ arrays pointers memory-management

我正在尝试使用 Person 数组指针来直接初始化数组。

我成功地为初始化列表中的每个元素使用了 new 运算符。但是,我很困惑,因为我正在考虑释放指针使用的内存,因为我使用了 new 关键字。

每当我使用 delete [] pp 时,程序都会崩溃,但它的工作就像下面粘贴的那样。

谁能给我讲讲?

#include<iostream>
#include<sstream>
using namespace std;
class Person
{
    string lastName;
    string firstName;
public:
    Person(string fname, string lname) : firstName(fname),lastName(lname)
    {
    }
    string output()
    {
        stringstream ostr;
        ostr<<firstName<<" "<<lastName;
        return ostr.str();
    }
};
int main()
{
    Person *pp[4] = {new Person("Yusuf","Tijjani"),new Person("Mubarak","Shettima"),new Person("Musty","Haruna"),new Person("Fatima","Suleiman")};
    for(int i =0;i<4;++i)
        cout<<pp[i]->output()<<endl;
    cin.get();
    return 0;
}

最佳答案

  • Person (*pp)[4] 是指向 4 个 Person 数组的指针。
  • Person *pp[4] 是指向 Person 的 4 个指针的数组。

由于 pp 是一个局部指针数组,您不能删除[]它:它在堆栈上。

相反,您需要删除 Person 的每个实例。

关于c++ - 要释放动态数组初始化时程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41968583/

相关文章:

c++ - 免费互斥问题

arrays - Delphi:Char 和 TCharArray 数组 "Incompatible Types"

arrays - 用分隔符将连接的 slice 拆分为最大N个长度的 block

javascript - 使用 jQuery 隐藏 Javascript 数组

c++ - 指针的第一个元素被污染了 C++

c++ - Pointer->Call() 和 (*Pointer).Call() 之间的区别

c++ - 将 malloc 转换为 new

java - 在 'for' 循环中递增 1 时格式化背后的技术原因?

c++ - 在 C++ 中使用带有共享变量的 pthread 进行多线程

C++ 使用别名访问嵌套类型(使用 vs typedef)