Cmd停止工作。 (程序崩溃)

时间:2015-08-23 19:37:19

标签: class cmd

我想制作市场物品上市计划。我遇到了代码问题。这是:

#include <iostream>
#include <string>

using namespace std;

char n = '\n';

class shop
{
public:
void setItem(int a, string b, float c){
itemCode = a;
itemName = b;
itemPrice  = c;
}
int getCode(string a){
    cout<< a<<itemCode<<n;
    //return itemCode;
}
string getName(string b){
    cout<< b<<itemName<<n;
    //return itemName;
}
float getPrice(string c){
    cout<< c<<itemPrice<<n;
    //return itemPrice;
}
void getAll (string a,string b,string c){
    getCode(a);
    getName(b);
    getPrice(c);
}
private:
    int itemCode;
    string itemName;
    float itemPrice;
};

int main()
{
string daiktas;
int kodas;
float kaina;
while(1){
cout<< "Iveskite daikto pavadinima: "<<n;
cin>> daiktas;
cout<< "Iveskite daikto koda: "<<n;
cin>> kodas;
cout<< "Iveskite daikto kaina: "<<n;
cin>> kaina;

shop kodas1;
kodas1.setItem(kodas, daiktas, kaina);
kodas1.getAll("Kodas: " , "Preke: ", "Kaina: ");
}
}

输入第二个cin(kodas)之后,我得到cmd“已停止工作”,在该程序cout之前:getName和getCode; 为什么不起作用?

1 个答案:

答案 0 :(得分:0)

// terrible code, don't use
int getCode(string a){
    cout<< a<<itemCode<<n;
    //return itemCode;
}
string getName(string b){
    cout<< b<<itemName<<n;
    //return itemName;
}
float getPrice(string c){
    cout<< c<<itemPrice<<n;
    //return itemPrice;
}

那是你的问题。你要回垃圾了。在普通类型的情况下这是好的,但是string右边会尝试在循环结束时释放,因为它超出范围 - 而bam,你损坏了堆栈。事实上,gcc甚至会告诉你:

  

*`./prog'出错:双重免费或损坏(快速登陆):0x08627a40 *

只需删除评论,让无用的return实际返回真实的东西(或使它们成为void,因为似乎没有人关心他们正在返回的东西)并且它的工作“很好”。正如代码可以正常工作一样好......至少它不会充当恶意软件并破坏用户的记忆。