Двойной указатель, который указывает на самосозданную структуру - Компилятор говорит ОК - Программа прерывается - PullRequest
0 голосов
/ 22 февраля 2012

Прямо сейчас я готовлюсь к экзамену (в университете) и думаю о создании собственных упражнений.Я думал о программировании треугольника Паскаля, где места в матрице (реализованные с двойным указателем на структуру) заполнены объектами типа моей структуры.

Вот мой код:

#include <iostream>
#include <string>
using namespace std;

int main(){
    struct Ferrari{
    string Modell;
    int Baujahr;
    int PS;
    };
Ferrari **matrix = new Ferrari* [5];
for(int i=0; i<5; i++){
    matrix[i]=new Ferrari[i+1];
}
matrix[0][0].Modell="F40";
matrix[0][0].Baujahr=2012;
matrix[0][0].PS = 210;
matrix[1][0].Modell=matrix[1][1].Modell="Enzo";
matrix[1][0].Baujahr=matrix[1][1].Baujahr=2000;
matrix[1][0].PS=matrix[1][1].PS=210;
for(int i=2; i<5; i++){
    for(int j=0; j<=i; j++){
        matrix[i][j].Modell=matrix[i-1][j].Modell + matrix[i-1][j-1].Modell;
        matrix[i][j].Baujahr=matrix[i-1][j].Baujahr + matrix[i-1][j-1].Baujahr;
        matrix[i][j].PS=matrix[i-1][j].PS + matrix[i-1][j-1].PS;
    }
}
for(int i=0; i<5; i++){
    for(int j=0; j<=i; j++){
        cout << matrix[i][j].Modell << "   ";
        cout << matrix[i][j].Baujahr << "   ";
        cout << matrix[i][j].PS << "   ";
    }
    cout << endl;
}
system("pause");
return 0;

}

Программа делает много странных вещей, но не то, что должна делать.Компилятор говорит, что хорошо, но когда я запускаю его, он выдает мне код ошибки: Необработанное исключение в 0x72f7ae7a в Testerei.exe: 0xC0000005: Место чтения нарушения доступа 0xabababab.

В этот момент как-то моя переменная i имеет значение-33651 ...

Не могли бы вы сказать мне, где проблема кода?Я знаю, что программа не имеет реальной функции ... Я просто хотел немного попрактиковаться с двойными указателями, структурами, строками (добавление строк ...).

Заранее спасибо!

С уважением,

Мануэль

1 Ответ

1 голос
/ 22 февраля 2012

Это ошибка:

for(int j=0; j<=i; j++){
    matrix[i][j].Modell=matrix[i-1][j].Modell + matrix[i-1][j-1].Modell;

при попытке доступа к массиву с индексом -1 при j = 0.

...