gpt4 book ai didi

c++ - 尝试添加到 C++ 中的 LinkedList。获取段错误

转载 作者:行者123 更新时间:2023-11-28 07:15:16 25 4
gpt4 key购买 nike

所以我试图在 C++ 中添加一个链接列表,但由于某种原因我一直收到段错误。

Stock 是将“成为”LinkedList 的类,StockAccount 是将访问它的类。

我插入数据的方式是它通过一个文件行购买行并解析当前行的信息并将其插入到列表中。

这是我用来添加到列表中的代码:

void StockAccount::addStock(string sN, double sP) {


Stock *temp, *temp2;

temp->StockName = sN;
temp->StockPrice = sP;
temp->next = NULL;

if (myHead == NULL) {
myHead = temp;
} else {
temp2 = myHead;
while (temp2->next != NULL) {
temp2 = temp2->next;
}
temp2->next = temp;
}

}

SegFault 似乎发生在我定义的行

temp->StockName=sN;

我是 C++ 的新手,所以我猜我使用的指针/引用有误。

下面是我定义 Stock 类的方式:

#include <string>

using namespace std;
using std::string;

class Stock {
friend class StockAccount;
public:

Stock() {
}

Stock(string name, double price) : StockName(name), StockPrice(price) {
this->next = NULL;
}

private:

string StockName = "";
double StockPrice = 0;
Stock *next;


};

下面是我如何定义 StockAccount 类。 Account 只是一个简单的基类。

class StockAccount : public Account {
friend class Account;

public:



StockAccount();


void addStock(string sN, double sP);
private:
Stock *myHead;
Stock *myTail;

};

及其实现:

StockAccount::StockAccount() {
vector<string> temp;
string line;
std::ifstream stockfile("Results.txt");
if (stockfile.is_open()) {
while (stockfile.good()) {


getline(stockfile, line);
istringstream ss(line);
string token;
while (std::getline(ss, token, ',')) {
temp.push_back(token);
}

//*stck = new stock(token.at(0), atof(temp.at(1)));

addStock(temp.at(0), atof(std::string(temp.at(1)).c_str()));
temp.clear();

}
stockfile.close();
} else {
cout << "Unable to open file" << std::endl << std::endl;
}

}
//http://www.codeproject.com/Articles/24684/How-to-create-Linked-list-using-C-C

void StockAccount::addStock(string sN, double sP) {


Stock *temp, *temp2;

temp->StockName = sN;
temp->StockPrice = sP;
temp->next = NULL;

if (myHead == NULL) {
myHead = temp;
} else {
temp2 = myHead;
while (temp2->next != NULL) {
temp2 = temp2->next;
}
temp2->next = temp;
}

}

最佳答案

变量 temp 未初始化。通过执行 temp->StockName = sN;,您实质上是在尝试解除对无效指针的引用,这当然会给您带来段错误。

您需要做的是在尝试对其进行任何操作之前通过执行 Stock *temp = new Stock(); 分配一个 stock 对象。

关于c++ - 尝试添加到 C++ 中的 LinkedList。获取段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20339714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com