2

我正在遭受一些访问冲突。我正在编写简单的程序,像数据库一样工作。

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;

有什么想法可能是错的吗?

4

1 回答 1

5

d[il].autor, if ilis not exactly0中,您将访问尚未分配的内存。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);
于 2013-06-10T10:28:13.380 回答