我遇到了一些违规行为。我正在编写简单的程序,像数据库一样工作。
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;
任何想法可能出错?
答案 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);