这是我实际代码的缩短版本。这也不会运行。 这条线
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。我需要其他东西的指针,所以我不能删除指针
答案 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 operator,std::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),向量可以将其数据移动到另一个位置,从而使指针无效。