macierz sąsiedztwa - błąd kompilacji w code blocks

0

Oto moj kod (lista sasiedztwa na macierz sasiedztwa). Problemem jest to, że program się nie kompiluje w code:blocks, ktoś wie co jest problemem ?
mam błąd Process returned -1073741819 (0xC0000005) execution time : 60.221 s (w zwyklym kompilatorze online dziala)

#include <iostream>
using namespace std;

int main(){
    int n, k, T1[100], T2[100];
    cout << "n = ";
    cin >> n;
    cout << "k = ";
    cin >> k;
    cout << "T1: ";
    for(int i=0; i<=n; i++){
        cin >> T1[i];
    }
    cout << "T2: ";
    for(int j=0; j<k; j++){
        cin >> T2[j];
    }

    cout << endl;
    cout << "Wynik: " << endl;
    int p;

    int T[100][100];
    for(int x=0; x<n; x++){
    	for(int y=0; y<n; y++){
    		T[x][y] = 0;
		}
	}

	for(int i=0; i<=n; i++){
		k = T1[i];
		for(k; k<T1[i+1]; k++){;
			T[i][T2[k]] = 1;
		}
	}

	for(int x=0; x<n; x++){
		cout << endl;
    	for(int y=0; y<n; y++){
    		cout << T[x][y] << " ";
		}
	}
	cout << endl;

    return 0;
}

Process returned -1073741819 (0xC0000005) execution time : 36.835 s

1

Czytaj uważnie komunikaty, program się kompiluje, tylko ma błąd wykonania. 0xC0000005 oznacza access violation, więc pewnie gdzieś używasz nieprawidłowego pointera. Użyj debuggera.

0

tylko czemu w innym kompilatorze pokazuje mi wynik a w code blocks mam ten komunikat ?

1

Code Blocks nie jest kompilatorem. Jak masz w programie UB to jego zachowanie jest niezdefiniowane. To że nie widzisz symptomu błędu nie oznacza, że błędu nie ma.

0

pomozesz mi ten bład znalezc?

0

Pewnie. Czy odpaliłeś program pod debuggerem?

Dodatkowo: skompiluj z flagą kompilacji -fsanitize=address aby dodać address sanitizer, który bezpośrednio pokaże gdzie jest błąd.

2

Odwołujesz się do niezainicjalizowanego elementu tablicy. Tu wcześniej wczytujesz n+1 elementów do T1:

for(int i=0; i<=n; i++) {
   cin >> T1[i];
}

czyli ostatnim zapisanym elementem jest T1[n]. Tymczasem tu:

for(int i=0; i<=n; i++) {
   k = T1[i];
      for(k; k<T1[i+1]; k++){;
      T[i][T2[k]] = 1;
   }
}

przy i=n próbujesz wczytać element T1[n+1].

1 użytkowników online, w tym zalogowanych: 0, gości: 1