Naruszenie dostępu do zapisu podczas tworzenia listy w VS 2019

0

Witam, od dwóch dni kombinuje jak naprawić błąd, który nie pozwala mi na stworzenie listy dynamicznej. W żadnym wypadku nie mogę przypisać wartości elementom, nieważne czy lista istnieje czy nie. Nie jestem do końca pewien czy to błąd w kodzie, ponieważ kolega któremu przesłałem wszystkie elementy projektu już mógł skompilować program i wszystko mu śmigało. Jest jakiś sposób żeby VS pominął ten "Nieobsługiwany wyjątek" z pomocą systemu?

void dodajBiorce(wsplXY tempCoord, wsplXY lastCoord, Cell valueArray[HEIGHT][WIDTH]) {
	
	Cell* wsk = valueArray[lastCoord.x][lastCoord.y].next;
	int czyAktualizacja = 0;

	if (wsk == NULL) {
		wsk = (Cell*)malloc(sizeof(Cell));
		wsk->biorca = tempCoord;
		wsk->next = NULL;
	}
	else {
		while (wsk != NULL) {
			if ((wsk->biorca.x == tempCoord.x) && (wsk->biorca.y == tempCoord.y)) {			//aktualizacja wartosci
				wsk->value = valueArray[tempCoord.x][tempCoord.y].value;
				czyAktualizacja++;
				break;
			}
			else {
				wsk = wsk->next;
			}
		}
	}

	if (!czyAktualizacja) {			//jezeli nie ma elementu w liscie
		Cell* nowy = (Cell*) malloc(sizeof(Cell));	
		nowy->biorca = tempCoord;
		nowy->next = NULL;
		wsk->next = nowy;
	}
}

opis_wyjatku.png
wartosci.png

1

Daj na tyle kodu, żeby można było zreprodukować, jaki kompilator?

0

Cześć lion137, podczas kopiowania dla Ciebie kodu, zauważyłem gdzie leży błąd, mianowicie dołączyłem złą bibliotekę. Nie wiem dlaczego nie namierzyłem tego wcześniej, ale mimo wszystko dziękuję Ci za chęci pomocy oraz za przyczynienie się pośrednio do rozwiązania ;)

1
Polishek napisał(a):

Cześć lion137, podczas kopiowania dla Ciebie kodu, zauważyłem gdzie leży błąd, mianowicie dołączyłem złą bibliotekę. Nie wiem dlaczego nie namierzyłem tego wcześniej, ale mimo wszystko dziękuję Ci za chęci pomocy oraz za przyczynienie się pośrednio do rozwiązania ;)

Mimo że (ze wstydu??? nie rozumiem) się bronisz przed zamieszczeniem pełnego kodu, już widać potencjalne dalsze błędy, np malloc nie zeruje pamięci, z kodu zerujesz tylko skończoną ilość pól (matematycznie mówiąc - potencjalnie nie wszystkie).

Okej będę pamiętał i poprawię, dzięki ;D Jeżeli chodzi o screenshoty to celem ich umieszczenia nie było pokazanie kodu, tylko pokazanie treści błędu oraz miejsca, w którym się on pojawia. Tę radę również zapamiętam. - Polishek 2020-09-10 16:16

Jeszcze DUUUŻO musisz się nauczyć własnymi pazurami o C, np to, że miejsce polecenia wyjątku najczęściej nie ma nic wspólnego z umiejscowieniem błędu.

I to, że błędy w C chodzą stadami.

0
AnyKtokolwiek napisał(a):

Mimo że (ze wstydu??? nie rozumiem) się bronisz przed zamieszczeniem pełnego kodu, już widać potencjalne dalsze błędy, np malloc nie zeruje pamięci, z kodu zerujesz tylko skończoną ilość pól (matematycznie mówiąc - potencjalnie nie wszystkie).

Mój program jest podzielony na 7 plików, więc trochę trudno byłoby mi skopiować całość, a poza tym jest to zbędne, bo reszta kodu nie ma nic wspólnego z tworzeniem listy, a jedynie wywołaniem funkcji która ów listę rozpoczyna lub dokłada kolejne elementy. Drugim powodem jest fakt, że jest to mój projekt na studia i nie wiem czy mogę udostępniać cały kod.

Jeszcze DUUUŻO musisz się nauczyć własnymi pazurami o C, np to, że miejsce polecenia wyjątku najczęściej nie ma nic wspólnego z umiejscowieniem błędu.
I to, że błędy w C chodzą stadami.

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