Błąd przy tablicy 2 wymiarowej

0

Witajcie

Mam problem, a mianowicie gdy podaje wymiary tablicy dynamicznej 2 wymiarowej to kiedy pierwszy parametr bedzie wiekszy niz drugi (wymiary tablicy) to wyskakuje błąd i zatrzymanie programu. Kiedy natomiast podam na odwrót to jest wszystko wporządku.
Gdzie popełniłem błąd? Proszę o odpowiedz. Wyrzuca błąd podczas losowania liczb do konkretnej komorki.

 
#include <stdlib.h>
#include <stdio.h>

void wczyt(int **tab,int a,int b);
int main()
{
	srand(time(NULL));
	int a,b;
	int **tab;

	printf("Podaj liczby a i b:");
	scanf("%d %d",&a,&b);

	tab=new int *[a];
	for(int j=0;j<a;j++)   //zapisuje NULL do wzkaznikow
	{
		tab[j]=NULL;
	}
	for(int x=0;x<a;x++)  //sprawdzam czy sa one nulem wszystkie
	{
		if(tab[x]!=NULL)
			printf("Komorka %d nie jest Nulem\n",x);
		else
		{
			printf("%d OK\n",x);
		}
		
	}
	for(int i=0;i<b;i++)
	{
		tab[i]=new int[b];

	}
	
	wczyt(tab,a,b);

	wypisz(tab,a,b);

	sprawdz_wiersz(tab,a,b);

	//elem(tab,a,b);
	system("pause");
	return 0;
}
void wczyt(int **tab,int a,int b)
{
	int i,j,e=0;
	printf("Wczytywanie liczb!\n");
	for(i=0;i<a;i++)
	{
		for(j=0;j<b;j++)
		{
			e=rand()%2;
			tab[i][j]=e;
			e=0;
		}
	}

}
0

To się nawet nie chce skompilować (http://ideone.com/LyRsG).

Edit: to ma być w końcu C czy C++?

0

Z tego co tu zauwazylem to:

  1. nie dolaczasz zadnej biblioteki dzieki ktorej mozna by bylo uzyc pseudolosowania (ctime)
  2. gdzie masz funkcje wypisz i sprawdz_wiersz ?

Do tego przy kazdym uzyciu new trzeba tez usuwac za pomoca delete.
(kompilowalem code::blocks jako plik cpp)

#include <stdlib.h>
#include <stdio.h>
#include <ctime>

void wczyt(int **tab,int a,int b);
int main()
{
        srand(static_cast<unsigned>(time(NULL)));
        int a,b;
        int **tab;

        printf("Podaj liczby a i b:");
        scanf("%d %d",&a,&b);

        tab = new int *[a];
        //for(int j=0;j<a;j++)   //zapisuje NULL do wzkaznikow
        //{
        //        tab[j]=NULL;
        //}

        for(int x=0;x<a;x++)  //sprawdzam czy sa one nulem wszystkie
        {
                if(tab[x]!=NULL)
                        printf("Komorka %d nie jest Nulem\n",x);
                else
                {
                        printf("%d OK\n",x);
                }

        }
        for(int i=0;i<a;i++)
        {
                tab[i] = new int[b];

        }

        wczyt(tab,a,b);

        //wypisz(tab,a,b);

        //sprawdz_wiersz(tab,a,b);

        //elem(tab,a,b);

        system("pause");
        return 0;
}
void wczyt(int **tab,int a,int b)
{
        int i,j,e=0;
        printf("Wczytywanie liczb!\n");
        for(i = 0; i < a; i++)
        {
                for(j=0;j<b;j++)
                {
                        e = rand()%2;
                        tab[i][j] = e;
                        e = 0;
                }
        }

} 

Poprawione :) + odkomentuj sobie ta petelke z wypelnianiem NULL'ami.
P.S. bardzo kiepsko sie to czyta ;D

0

Dziękuje za pomoc.
Wkleilem ten kawałek kodu gdzie miałem problem. Reszty nie wklejalem bo wszystko działa i by tylko gorzej sie czytało.
Ps. Aż tak zle w czytaniu tego kodu nie jest:]

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