如何在這個簡單的 C 程式中正確釋放動態記憶體?執行程式時出現分段錯誤(核心轉儲)。我試圖找出我哪里出錯了。提前致謝。
我正在嘗試將動態分配的物件添加到陣列中,并試圖讓解構式清除記憶體。我不確定我是否在 carList 中正確創建了解構式。
#include <iostream>
#define MAX 3
class Car{
public:
Car(std::string name){
this->name = name;
}
~Car(){
}
std::string getName(){
return this->name;
}
private:
std::string name;
};
class carList{
public:
carList(){
this->length = 0;
}
~carList(){
//the deconstructer; I am unsure If I have implemented it correctly
for (int i = 0; i < this->length; i )
{
if(listCar[i] != nullptr){
delete[] listCar[i];
}
}
}
int getLength(){
return this->length;
}
// adding to the end of the list, unsure whether Implemented correctly
void addEndList(Car* car){ //???
if(this->length < MAX){
this->listCar[length 1] = car;
this->length ;
}
}
private:
Car* listCar[MAX];
int length;
};
int main(){
carList* carlist = new carList();
std::cout << carlist->getLength() <<std::endl;
Car* car2 = new Car("one");
Car* car3 = new Car("two");
carlist->addEndList(car2);
carlist->addEndList(car3);
std::cout << carlist->getLength() <<std::endl;
std::string name1 = car2->getName();
std::cout << name1 << std::endl;
delete carlist; // deleting the carlist, unsure if I need to delete car2,
//and car3 or if the destructor handles that, which I am
//trying to implement
return 0;
}
uj5u.com熱心網友回復:
陣列索引從0C 開始。所以,
this->listCar[length 1] = car;
應該
this->listCar[length] = car;
否則,您不會初始化 index 0,而是初始化delete它。
第二個問題是delete. 您應該使用for和fordelete回傳的指標。你用過。所以,newdelete[]new[]new
delete[] listCar[i];
應該
delete listCar[i];
經過這 2 項更改后,它看起來沒問題:https ://godbolt.org/z/84M1fq1fv
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/460440.html
上一篇:將資料從float*傳輸/復制到vector<float>的最快方法
下一篇:為什么啟用優化時代碼片段會卡住?
