[英]Segmentation fault when calling destructor
嘿伙計們,我是 C++ 的新手,這是我的學期項目。 當我在堆棧上創建 IPADDRESS object 時,main.cpp 文件將運行,直到為 IPADDRESS object 調用解構器成員。 第一部分運行良好,第二部分返回相同的 output,只是分段錯誤。
// Main file
#include <bits/stdc++.h>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include "IPInfo.h"
using namespace std;
// Function declaration of display()
void displayInfo(IPADDRESS);
int main(){
const char* address = "cbc.ca";
const char* command = "nslookup ";
char buf[256];
strcpy(buf, command);
strcat(buf, address);
string* Info = new(nothrow) string[256]; // Allocate 256 bytes to this string
*Info = system(buf); // Allocate the response from the command line to Info (which is on the heap)
cout << Info << endl << *Info << endl << "===============================" << endl << endl;
delete[] Info;
IPADDRESS test("cbc.ca");
displayInfo(test);
// Displays but never exits the program correctly
return 0;
}
void displayInfo(IPADDRESS Website){
string* displayBus;
displayBus = Website.getInfo();
cout << displayBus;
}
// Header file
#ifndef IPInfo_H
#define IPInfo_H
#include <bits/stdc++.h>
#include <string>
#include <iostream>
using namespace std;
class IPADDRESS{
private:
const char* command = "nslookup ";
string url;
string info;
string address;
int searchFor(string locator); // Find a substring in the getInfo string
public:
string* getInfo(); // Using the system("nslookup") call, get the info (Will be allocated to heap)
IPADDRESS(string website);
~IPADDRESS();
string getIPAddress(); // Using searchFor() get rid of unneeded characters and dump the IPAddress to a string
string getName(); // Also output the name
};
IPADDRESS::IPADDRESS(string website){
url = website;
}
IPADDRESS::~IPADDRESS(){
}
#endif
這是不正確的
IPADDRESS::~IPADDRESS(){
delete &address;
delete &url;
delete &info;
delete command;
}
您不能也不應該delete
您沒有new
的任何變量。
默認的編譯器生成的析構函數在這里已經足夠且正確(您可以完全刪除它,在這種情況下它將隱式生成)。
~IPADDRESS() = default; // don't even need this, compiler will generate in this case
delete
用於釋放通過new
分配的內容,否則不得使用它。
目前您發布的代碼不包含new
,因此析構函數應該是:
IPADDRESS::~IPADDRESS(){
}
另請注意,如果您使用動態 memory 分配,則應遵循三法則。 最好避免在 C++ 中進行裸動態 memory 分配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.