Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Naruszenie ochrony pamięci w strukturze dynamicznej

Ostatnio zmodyfikowano 2016-10-26 13:58
Autor Wiadomość
Paweł91
Temat założony przez niniejszego użytkownika
Naruszenie ochrony pamięci w strukturze dynamicznej
» 2016-10-26 13:24:10
Jest to mój pierwszy post, dlatego chciałbym powitać wszystkich serdecznie. A teraz do rzeczy. Program się kompiluje poprawnie, ale w trakcie jego działania otrzymuje z konsoli informacje o naruszeniu pamięci, bezpośrednio po podaniu pierwszej zmiennej nazwanej number_of_cars. A wiec nie mogę podać danych do obiektu typu string który jest składową stryktury car. Dziękuje za wszystkie pomocne odpowiedzi.

C/C++
#include <iostream>
#include <string>

int main()
{
    using namespace std;
   
    struct car
    {
        string mark;
        int year_of_production;
    };
   
    int number_of_cars;
    cout << "Ile samochodów chcesz skatalogować? ";
    ( cin >> number_of_cars ).get();
   
    car * cars = new car[ number_of_cars ];
   
    for( int i = 0; i < number_of_cars; i++ )
    {
        cout << "Samochód #" << i + 1 << ": " << endl;
        cout << "Prosze podać markę: ";
        getline( cin, cars[ number_of_cars ].mark );
        cout << "Rok produkcji: ";
        ( cin >> cars[ number_of_cars ].year_of_production ).get();
    }
   
    for( int i = 0; i < number_of_cars; i++ )
    {
        cout << cars[ number_of_cars ].year_of_production << " " << cars[ number_of_cars ].mark << endl;
    }
   
    delete[] cars;
   
    return 0;
}
P-152940
killjoy
» 2016-10-26 13:34:10
W pętli do odwoływania się do kolejnych indeksów tablicy powinieneś użyć iteratora
i
, a nie rozmiaru tablicy. Masz segmentation fault, bo rozmiar tablicy, jest indeksem, który wykracza poza jej zakres.
P-152941
Paweł91
Temat założony przez niniejszego użytkownika
» 2016-10-26 13:58:38
killjoypl Eh, aż mi wstyd. Byłem w gorącej wodzie kompany z tym programem, bo jestem na nogach od wczoraj i chciałem zrobić coś konstruktywnego w tym stanie, ale organizm walczył z psychiką i wyszło to co wyszło, czyli kompromitacja. Dziękuje, tobie bardzo, teraz wszystko działa.
P-152943
« 1 »
  Strona 1 z 1