为什么我的程序在接受用户输入后因访问冲突而崩溃?

时间:2009-11-12 20:10:57

标签: c++ error-handling

我在使用Visual C ++ 2008 Express Edition破坏我的程序时遇到了这个奇怪的错误:

'Ex2.exe': Loaded 'D:\studyMA\c++\visual studio\Ex2\Ex2\Debug\Ex2.exe', Symbols loaded.
'Ex2.exe': Loaded 'C:\WINDOWS\system32\ntdll.dll'
'Ex2.exe': Loaded 'C:\WINDOWS\system32\kernel32.dll'
'Ex2.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcp90d.dll'
'Ex2.exe': Loaded 'C:\WINDOWS\WinSxS\x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.30729.1_x-ww_f863c71f\msvcr90d.dll'
First-chance exception at 0x1049615e in Ex2.exe: 0xC0000005: 
    Access violation reading location 0x333ee91c.
Unhandled exception at 0x1049615e in Ex2.exe: 0xC0000005: 
    Access violation reading location 0x333ee91c.
The program '[948] Ex2.exe: Native' has exited with code 0 (0x0).

product如下所示:

 using namespace std; 

 class product
 { 
 public: 
     string Product_code;
     string Product_Name;
     string Product_Category;
     string Product_Vendor;
     string Product_Discription;
     string Product_Group;

    void input();
    void clear_product_cell();
 };

我还有一个类(包含在bomba.h中),其中包含:

     product ProductList[100];

我在bomba.cpp中编写代码,要求用户输入:

 char ch;
 cout << "Please Select your option: ";
 cin >> ch;

 switch(ch)
   {
     case '1'://Add a product
     {
        ProductList[0].input();
             :
             :
        :

product.cpp看起来像这样:

 product::input()

     do{
        cout << "Please enter product code: ";
        getline(cin,Product_code);
        if (Product_code.empty())
            cout << "You Must Enter A Code!!!";
    } while(Product_code.empty());
    cout << endl;

在控制台中,我得到:

  

请选择您的选择:1   请输入产品代码:

...当我输入一个数字并在数字后输入CR键时程序崩溃,我得到上面引用的错误。

3 个答案:

答案 0 :(得分:2)

没有任何信息可以继续(“Product_code是类产品中的成员变量”不是很有帮助),我猜想当你使用.empty()访问它时,Product_code为null,这会导致访问违反。 (我猜是基于'0xC0000005'错误代码,但这只是一个猜测。)

答案 1 :(得分:0)

0xC0000005或访问冲突表示您正在尝试访问不属于您的进程的内存。这通常意味着您没有分配内存。

不幸的是,您提供的代码太少,无法说出出错的地方,但我猜测Product_code是未初始化的。

答案 2 :(得分:0)

cin >> Product_code;之后Product_code是什么样的?可能是Product_code.empty()正在调用一个不存在的函数,因为它是null