访问冲突写入位置错误

时间:2013-06-10 10:23:12

标签: c++ access-violation

我遇到了一些违规行为。我正在编写简单的程序,像数据库一样工作。

First-chance exception at 0x00088AB6 in kasia2.exe: 0xC0000005: Access violation writing location 0xCDCDCDCD. Unhandled exception at 0x00088AB6 in kasia2.exe: 0xC0000005: Access violation writing location 0xCDCDCDCD.

尝试连续第二次执行此步骤时出现问题。

 cout << "Podaj autora: ";
 cin.sync();
 getline(cin, d[il].autor);
 cout << "Podaj tytul: ";
 cin.sync();
 getline(cin, d[il].tytul);
 cout << "Podaj date wydania: ";
 cin >> d[il].data;

这是我工作的结构和内存分配。

struct Ksiazka
{
    string autor;
    string tytul;
    int data;
};

struct Ksiazka * d = new Ksiazka;

任何想法可能出错?

1 个答案:

答案 0 :(得分:5)

d[il].autor中,如果il不完全是0,您将访问尚未分配的内存。 0xCDCDCDCD是Microsoft&#34;填充模式之一&#34;对于未使用的内存,所以情况似乎如此。

如果您需要多套Ksiazka,那么您应该执行以下操作:

struct Ksiazka * d = new Ksiazka[x];

其中x我想要的号码。

或者,特别是如果您不知道实际需要多少&#34;,请使用std::vector,以及类似的内容:

 std::vector<Ksiazka> d;`

 ... 

 Ksiazaka tmp;
 cout << "Podaj autora: ";
 cin.sync();
 getline(cin, tmp.autor);
 cout << "Podaj tytul: ";
 cin.sync();
 getline(cin, tmp.tytul);
 cout << "Podaj date wydania: ";
 cin >> tmp.data;
 d.push_back(tmp);