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.

この手順を 2 回続けて実行しようとすると、問題が発生します。

 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場合、割り当てていないメモリにアクセスします。は、未使用のメモリに対する Microsoft の「フィル パターン」の 1 つであるため、そのように見えます。il00xCDCDCDCD

の複数のセットが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 に答える