试图添加到 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-&gt;StockName = sN;,您实际上是在尝试取消引用无效指针,这当然会给您带来分段错误。

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

【讨论】:

以上是关于试图添加到 C++ 中的 LinkedList。获取 SegFault的主要内容,如果未能解决你的问题,请参考以下文章

类LinkedList

类LinkedList(集合)

C++ 中的 LPWSTR、wchar_t* 和无符号短指针

将 realsesense RGB-D 图像从统一传递到 C++

iOS 框架中的 LinkedList 等价物是啥?

如何在 Visual C++ 2008 中将 MFC 应用程序项目添加到 Win32 应用程序项目