tablica 2 wymiarowa argumentem funkcji

0

Witam,
Nie do końca wiem co robię źle w tym kodzie, niby visual express nie wyrzuca mi błędów podczas debuggowania, ale wywala program w momencie, gdy zaczynam zerowanie elementów tablicy w funkcji zerowanie( int **plansza ) i mam komunikat: Unhandled exception at 0x00cf115a in projekt.exe: 0xC0000005: Access violation writing location 0xcdcdcdcd.

		CXX0030: Error: expression cannot be evaluated	

Poniżej zamieszczam swój kod:

<code class="c"> 
#include <stdio.h>
#include <tchar.h>
#include <stdlib.h>

#define N 10				// liczba wierszy
#define M 10				// liczba kolumn

void zerowanie( int **plansza );

int _tmain(int argc, _TCHAR* argv[])
{
	int **plansza, i;							// tworzenie wskaznika do int

	plansza = (int**) malloc( N * sizeof(int*));
		for( i = 0; i < N; ++i);
		{
			plansza[i] = (int*) malloc( M * sizeof(int));			//tworzenie dynamicznej tablicy o wymiarach N x M
		}

	
	
	zerowanie( plansza );

	for( i = 0; i < N; ++i)
	{
		free( plansza[i] );
	}
	free( plansza);								// Zwolnienie pamieci zarezerwowanej dla planszy

	system("PAUSE");
	
	return 0;
}
//*********************************************************************************************************************

void zerowanie(int **plansza )
{
	int i, j;

	for( i = 0; i < N; i++)
		for( j = 0; j < M; j++)
		{
				plansza[i][j] = 0;				// zapisywanie zer w tablicy         Tutaj wyrzuca mi błąd
		}		
}</co​de>
2
for( i = 0; i < N; ++i);

Niepotrzebne średniki bolą.

Przy okazji:

używaj tag​ów: <co​de=c>kod</co​de>,
formatuj kod: https://gist.github.com/KrzaQ/af69526aeab0b14ec55a nie czytelniej tak? :)

0

Hah jesteś świetny, nie zauważyłem tego :D
Dziękuję bardzo za pomoc, męczyłem się z tym ponad 3 godziny szukając błędu xD

Mam jeszcze pytanie co do tego fragmentu kodu:

void wypisz( int** plansza )
{
	int i  = 0, j = 0;

	for( i; i < N; i++)
	{	
		printf("\n");					// przejscie o linie w dol po zakonczeniu wypisywania kazdego wiersza

		for(j; j < M; j++)
		{
			printf(" %d ", plansza[i][j]);		// wypisywanie elementow w danym wierszu
		}
	}
}
//*********************************************************************************************************************

Zastanawia mnie dlaczego ta funkcja wypisuje mi tylko i wyłącznie jeden wiersz, podczas gdy mam tablicę 10x10?
Będę wdzięczny za szybką odpowiedź, gdyż dręczy mnie to już dłuższy czas i nie mam pojęcia o co chodzi.

1

Nie ustawiasz ponownie wartości j. Po pierwszym obiegu pętli po tej zmiennej, jej wartość to 10. Nie zostaje ona zmieniona, więc dla i == 1, j == 10, więc pętla for(j; j < M; j++) wykonuje się 0 razy.

Ponadto, jeśli chcesz wyświetlać nową linię po wypisaniu rzędu, to wyświetlaj ją po, a nie przed.

void wypisz( int** plansza )
{
	int i = 0, j = 0;

	for(; i < N; i++){
		for(j = 0; j < M; j++){
			printf(" %d ", plansza[i][j]);
		}
		printf("\n");
	}
}
0

Dziękuję Ci bardzo, jesteś niesamowity, że potrafisz znaleźć taki błąd w cudzym kodzie, ale musisz mieć sporo doświadczenia, żeby to robić, gratulacje. ;)
Nie wierzę co zrobiłem :D
Niestety takie błędy zdarzają mi się często i muszę nad tym popracować, bo tracę zbyt dużo czasu.
Jeszcze raz po stokroć dziękuję ;)

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