试图添加到 C++ 中的 LinkedList。获取 SegFault
Posted
技术标签:
【中文标题】试图添加到 C++ 中的 LinkedList。获取 SegFault【英文标题】:Trying to add to a LinkedList in C++. Getting a SegFault 【发布时间】:2013-12-02 23:07:43 【问题描述】:所以我试图添加到 c++ 中的链接列表,但由于某种原因我不断收到 SegFault。
Stock 是“成为”LinkedList 的类,StockAccount 是访问它的类。
我插入数据的方式是通过文件行buy line,解析当前行的信息并插入到列表中。
这是我用来添加到列表中的代码:
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;
【问题讨论】:
【参考方案1】:变量 temp 未初始化。通过执行temp->StockName = sN;
,您实际上是在尝试取消引用无效指针,这当然会给您带来分段错误。
您需要做的是在尝试对它执行任何操作之前,通过执行Stock *temp = new Stock();
分配一个stock
对象。
【讨论】:
以上是关于试图添加到 C++ 中的 LinkedList。获取 SegFault的主要内容,如果未能解决你的问题,请参考以下文章
C++ 中的 LPWSTR、wchar_t* 和无符号短指针