访问冲突写入位置错误

Access violation writing location error

本文关键字:错误 位置 访问冲突      更新时间:2023-10-16

我遇到一些访问冲突。我在写一个简单的程序,像数据库一样工作。

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;

有什么问题吗?

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

如果你想要多个Ksiazka集合,那么你应该这样做:

struct Ksiazka * d = new Ksiazka[x];

其中x是你想要的数字。

或者,特别是当你不知道你实际"需要"多少的时候,使用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);