Dynamiczna tablica dwuwymiarowa w C

0

Witam,
czy mógłby ktoś pomóc i wytłumaczyć czemu nie działa mi program na wylosowanie i wypisanie tablicy o podanych wymiarach.

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

int main()
{
    int a; //wiersze tablicy
    int b; //kolumny tablicy
    int **t;
    int i;
    int j;
    srand( time ( NULL));

    printf("Podaj ilosc wierszy : ");
    scanf("%d" , &a );
    printf("\nPodaj ilosc kolumn : ");
    scanf("%d" , &b );

    t[a][b] = (int *)malloc(a * b * sizeof(int));


    for( i=0 ; i < a ; i++ ){
        for ( j = 0 ; j < b ; j++ ){
            t[i][j] = rand()%30 ;
            }
        }

    for( i=0 ; i < a ; i++ ){
        for ( j = 0 ; j < b ; j++ ){
            printf("%.3d " , t[i][j] );
            }
            printf("\n");
    }


    free(t);
    return 0;
}

0

Patryk27
Po kompilacji i wystartowaniu podaję ilość wierszy i kolumn po czym program kończy działanie ( tj, nic nie wypisuje w konsoli )

0

Co mówi debuger?

0

Nie nie, kompiluje się bez błędów

W build log NIE MA żadnych errorów/warning

Wygląda to tak po "uruchomieniu"

screenshot-20200123193632.png

Wybaczcie że nie podaje wszystkiego Od razu ale sam nie do końca wiem co powinienem podać dopiero się uczę

1

Nie Inicjalizujesz prawidłowo tablicy, tak wyglada funkcja generujaca losową tablicę integerów o rozmiarze N x N, łatwo przerobić na N x K:

int ** genRandomTwoDimArray(int N, int rank){
    srand((unsigned) time(NULL));
    int **out;
    out = malloc(sizeof(int*) * N); 
    for (int i = 0; i < N; ++i) {
		out[i] = malloc(sizeof(int*) * N);
	}
    for(int i=0; i<N; i++)
    {
        for(int j=0; j<N; j++)
        {
            out[i][j] = rand()%rank;
        }
    }
    return out;
}
0

A myślisz, że co to robi?

    t[a][b] = (int *)malloc(a * b * sizeof(int));
0

@lion137: dziękuje pomogło bardzo wygląda na to że wszystko działa

@enedil chodziło o zarezerwowanie miejsca dla tablicy ale już wiem że to było całkowicie źle

Dziękuję za pomoc wszystkim udało się

0

Kolego, zainkluduj time.h jeżeli chcesz wykorzystać srand. Nastepnie int **t = new int *[a] - tworzysz tablice wskaźników i przypisujesz jej elementy "a".

#include <iostream>
#include <stdlib.h>
#include <time.h>

int main()
{
    int a; //wiersze tablicy
    int b; //kolumny tablicy
    int i;
    int j;
    srand( time ( NULL));

    printf("Podaj ilosc wierszy : ");
    std::cin >> a;
    printf("\nPodaj ilosc kolumn : ");
    std::cin >> b;

    int **t = new int *[a];

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

    for( i=0 ; i < a ; i++ ){
        for ( j = 0 ; j < b ; j++ ){
            printf("%.3d " , t[i][j] );
        }
        printf("\n");
    }

    free(t);
    return 0;
}

Popracuj tylko nad wyciekiem pamięci, podpowiem tylko, że nie wystarczy jednorazowo wywołać delete [] t.

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