我无法将矢量分配给另一个矢量。程序崩溃了

时间:2016-01-23 17:24:52

标签: c++ vector stl crash assign

这是我实际代码的缩短版本。这也不会运行。 这条线

tempPurchaseAndID[0] = tempPurchase;

导致崩溃。

#include<vector>
#include<iostream>
using namespace std;
int main()
{

    string* strTempPurchase = new string("", "");
    string* tempOneID = new string("", "");
    vector<string> temp;//if category name exists in his purchase
    vector<string*/*size of two*/> tempPurchase;
    vector<string*/*size of two*/> oneID;// vector for one id

    vector<string*>* tempPurchaseAndID{};
    tempOneID[0] = "2222";

    oneID.push_back(tempOneID);
    strTempPurchase[0] ="milk";
    strTempPurchase[1] = "3";
    tempPurchase.push_back(strTempPurchase);
    tempPurchaseAndID[0] = tempPurchase;
    tempPurchaseAndID[1] = oneID;
    std::cin.get();
    return 0;
}

有人能看到问题并建议解决方案吗? 提前谢谢。

P.S。我需要其他东西的指针,所以我不能删除指针

3 个答案:

答案 0 :(得分:2)

正如已经指出的那样,你的问题始于指针。

首先vector<string*>* tempPurchaseAndID{};不是向量而是空指针。使用tempPurchaseAndID[0]引用空指针会导致段错误。

最好只使用一个向量,而不是指向向量的指针:

vector<vector<string*> > tempPurchaseAndID;

但即使是现在,你的程序仍会在同一行中崩溃,但这次是因为另一个原因:tempPurchaseAndID将有0长度,并且没有索引为0的元素!所以最好使用push_back,最后在向量中添加元素:

tempPurchaseAndID.push_back(tempPurchase);
tempPurchaseAndID.push_back(oneID);

尝试减少指针的使用 - 它们是许多错误和错误的来源。

答案 1 :(得分:1)

std::vector已经支持assignment operatorstd::string也支持<%= link_to '', new_conversation_path(:recipients_id => @user.id), class: 'send-message-icon' %>

我没有看到你在这里弄乱指针的原因。复制指针不会给你你想要达到的目标。

答案 2 :(得分:0)

你正在移动传递第一个字符串并尝试写入一个不存在的字符串:

strTempPurchase[0] ="milk";
strTempPurchase[1] = "3";

然后你在这里做了类似的事情,增加的问题是你从未真正创建过strTempPurchase的实例:

tempPurchaseAndID[0] = tempPurchase;
tempPurchaseAndID[1] = oneID;

另请注意,通过指针处理向量并不理想。如果你调整向量的大小(例如使用push_back),向量可以将其数据移动到另一个位置,从而使指针无效。