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

macierz sąsiedztwa - błąd kompilacji w code blocks
DC
  • Rejestracja:ponad 6 lat
  • Ostatnio:dzień
  • Postów:325
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)

Kopiuj
#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

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Szczecin
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.


DC
  • Rejestracja:ponad 6 lat
  • Ostatnio:dzień
  • Postów:325
0

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

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Szczecin
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.


DC
  • Rejestracja:ponad 6 lat
  • Ostatnio:dzień
  • Postów:325
0

pomozesz mi ten bład znalezc?

kq
Moderator C/C++
  • Rejestracja:prawie 12 lat
  • Ostatnio:3 minuty
  • Lokalizacja:Szczecin
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.


GS
  • Rejestracja:prawie 9 lat
  • Ostatnio:12 dni
  • Postów:1265
2

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

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

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

Kopiuj
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].

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.