C++ 要释放动态数组初始化时程序崩溃
我试图使用Person数组指针直接初始化数组 我成功地为初始化列表中的每个元素使用了C++ 要释放动态数组初始化时程序崩溃,c++,arrays,pointers,memory-management,C++,Arrays,Pointers,Memory Management,我试图使用Person数组指针直接初始化数组 我成功地为初始化列表中的每个元素使用了new操作符。但是,我很困惑,因为我正在考虑释放指针使用的内存,因为我使用了new关键字 每当我使用delete[]pp时,程序就会崩溃,但其工作方式与下面粘贴的一样 有人能告诉我这件事吗 #include<iostream> #include<sstream> using namespace std; class Person { string lastName; str
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;
}
#包括
#包括
使用名称空间std;
班主任
{
字符串lastName;
字符串名;
公众:
Person(string fname,string lname):firstName(fname),lastName(lname)
{
}
字符串输出()
{
stringstream ostr;
ostr
Person(*pp)[4]
是指向4个Person
s数组的指针
Person*pp[4]
是指向Person
的4个指针数组
由于pp
是指针的本地数组,因此不能删除[]
它:它在堆栈上
相反,您需要删除Person的每个实例如果pp
是指向动态数组的指针,那么您可以像这样释放内存:
delete[] pp;
但实际上,您声明的是指针数组,而不是指向动态数组的指针:
Person *pp[4] = {...}; // this is an array of pointers not a pointer to a dynamic array
在这种情况下,要释放内存,必须迭代所有元素并调用delete:
for(int i(0); i < 4; i++)
delete pp[i];
for(int i(0);i<4;i++)
删除pp[i];
- 如果数组中的指针是指向数组的指针,则可以通过以下方式释放内存:
for(int i(0); i < 4; i++)
delete[] pp[i];
for(int i(0);i<4;i++)
删除[]页[i];
您需要对数组中的内容调用delete,而不是数组本身。您真正需要的是停止使用new
。好的。我尝试了这行代码,它在释放它时起作用。'for(int I=0;iHow?如果初始化中没有新代码,代码将无法编译@juanchopanza@Kinyo356Person pp[4]={个人(“优素福”、“蒂贾尼”)、个人(“穆巴拉克”、“谢蒂玛”)、个人(“发霉”、“哈鲁纳”)、个人(“法蒂玛”、“苏莱曼”)};
实际上OP不需要动态分配任何东西。