所以我一直在研究这段代码,而且我不是很熟练。我创建了两个类,一个定义了购物清单的项目,另一个创建了一个对象数组,并将它们作为列表输出。该程序在我的Windows命令提示符下工作,但在使用cout语句输出数组时,在GNU命令行上有段错误。
void List::createList(Item ** itemPtr, int size)
{
string** list1 = new string*[size];
for(int i = 0; i < 5; i++)
{
list1[i] = new string[5];
}
for (int i = 0; i < size; i++)
{
list1[i][0] = itemPtr[i]->getName();
list1[i][1] = itemPtr[i]->getUnit();
list1[i][2] = itemPtr[i]->getSTRnumToBuy();
list1[i][3] = itemPtr[i]->getSTRcost();
list1[i][4] = itemPtr[i]->getSTRextCost();
}
cout << endl << left << fixed << setw(15) << setprecision(2) << "Name";
cout << fixed << left << setw(15) << setprecision(2) << "Unit Type";
cout << fixed << left << setw(15) << setprecision(2) << "# of units";
cout << fixed << left << setw(15) << setprecision(2) << "Cost/Unit";
cout << fixed << left << setw(15) << setprecision(2) << "Total" << endl;
for (int i = 0; i < size; i++)
{
cout << fixed << left << setw(15) <<setprecision(2)<<endl<< list1[i][0];
cout << fixed << left << setw(15) << setprecision(2) << list1[i][1];
cout << fixed << left << setw(15) << setprecision(2) << list1[i][2];
cout << fixed << left << setw(15) << setprecision(2) << list1[i][3];
cout << fixed << left << setw(15) << setprecision(2) << list1[i][4];
}
}
答案 0 :(得分:1)
你的第一个循环应该是:
for(int i = 0; i < size; i++)
{
list1[i] = new string[5];
}
即循环到size
,直到5。
答案 1 :(得分:0)
string** list1 = new string*[size];
for(int i = 0; i < 5; i++)
对我来说看起来像个错误:if size
&lt; 5然后你将读出你创建的数组的界限。
list1[i][0] = itemPtr[i]->getName();
list1[i][1] = itemPtr[i]->getUnit();
list1[i][2] = itemPtr[i]->getSTRnumToBuy();
list1[i][3] = itemPtr[i]->getSTRcost();
list1[i][4] = itemPtr[i]->getSTRextCost();
如果itemPtr
数组的大小小于size
,则可能会失败。
另一点,虽然与你所看到的崩溃无关,但你在这里泄露了记忆。 list1
是一个本地变量,不存储在您班级的某个地方。你是在堆上为它分配内存,但是不要把它释放到任何地方(delete
)。
答案 2 :(得分:0)
你使用C ++而不是C所以使用向量的力量
Function master(sega)
master(sega) = WorksheetFunction.SumIf([sega], "<80")
End Function
看Ma,没有void List::createList(Item ** itemPtr, int size) {
vector<vector<string>> list1;
list1.resize(size);
for (int i = 0; i < size; i++) {
list1[i].resize(5);
list1[i][0] = itemPtr[i]->getName();
list1[i][1] = itemPtr[i]->getUnit();
list1[i][2] = itemPtr[i]->getSTRnumToBuy();
list1[i][3] = itemPtr[i]->getSTRcost();
list1[i][4] = itemPtr[i]->getSTRextCost();
}
cout << endl << left << fixed << setw(15) << setprecision(2) << "Name";
cout << fixed << left << setw(15) << setprecision(2) << "Unit Type";
cout << fixed << left << setw(15) << setprecision(2) << "# of units";
cout << fixed << left << setw(15) << setprecision(2) << "Cost/Unit";
cout << fixed << left << setw(15) << setprecision(2) << "Total" << endl;
for (int i = 0; i < size; i++)
{
cout << fixed << left << setw(15) <<setprecision(2)<<endl<< list1[i][0];
cout << fixed << left << setw(15) << setprecision(2) << list1[i][1];
cout << fixed << left << setw(15) << setprecision(2) << list1[i][2];
cout << fixed << left << setw(15) << setprecision(2) << list1[i][3];
cout << fixed << left << setw(15) << setprecision(2) << list1[i][4];
}
}
和new
s。