Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Problem z dwuwymiarową tablicą dynamiczną

Ostatnio zmodyfikowano 2016-01-08 13:14
Autor Wiadomość
Matis28
Temat założony przez niniejszego użytkownika
Problem z dwuwymiarową tablicą dynamiczną
» 2016-01-08 09:42:02
cześć mam problem z moim kodem. Wszystko działa dobrze do switcha a po nim bywa różnie raz wypisze mi tablice raz nie. Czym to może być spowodowane? Chciałbym jeszcze zapytać czy dobrze stworzyłem i zniszczyłem tablicę?
C/C++
#include <iostream>
#include <stdlib.h>
#include <ctime>

using namespace std;





int main() {
    srand( time( NULL ) );
    int m, n, a, w1, w2, max;
    w1 = w2 = max = 0;
    cout << "podaj wymiary tablicy: ";
    cin >> m >> n;
    int ** tab;
    tab =( int ** ) malloc( m + 1 );
    for( int i = 0; i < n; i++ )
         tab[ i ] =( int * ) malloc( n + 1 );
   
    cout << "[1]-Wczytaj wlasne liczby\n[2]-Wczytaj losowe liczby" << endl;
    cin >> a;
    switch( a ) {
    case 1:
        cout << "Podaj liczby: " << endl;
        for( int i = 0; i < m; i++ ) {
            cout << endl;
            for( int j = 0; j < n; i++ )
                 cin >> tab[ i ][ j ];
           
        }
        break;
    case 2:
        for( int i = 0; i < m; i++ )
        for( int j = 0; j < n; j++ )
             tab[ i ][ j ] = rand() % 101 + 0;
       
        break;
    }
   
    for( int i = 0; i < m; i++ )
    for( int j = 0; j < n; j++ )
    if( max < tab[ i ][ j ] ) {
        max = tab[ i ][ j ];
        w1 = i;
        w2 = j;
    }
   
    for( int i = 0; i < m; i++ ) {
        cout << endl;
        for( int j = 0; j < n; j++ )
             cout << tab[ i ][ j ] << "  ";
       
    }
    cout << "Wartosc maxymalna w tablicy: tab[" << w1 << "][" << w2 << "] = " << max;
   
   
    for( int i = 0; i < n; i++ )
         free( tab[ i ] );
   
    free( tab );
    return 0;
}
P-143109
j23
» 2016-01-08 10:34:36
C/C++
tab =( int ** ) malloc( m + 1 );

for( int i = 0; i < n; i++ )
     tab[ i ] =( int * ) malloc( n + 1 );
Pętla powinna kręcić się tyle razy, ile jest wierszy (czyli m), a teraz kręci się tyle, ile jest kolumn - to błąd. To samo z usuwaniem.
P-143112
Matis28
Temat założony przez niniejszego użytkownika
» 2016-01-08 10:53:12
poprawiłem ale błąd nie zniknął. Nadal wyskakują błędy po wyświetleniu tablicy.
P-143114
darko202
» 2016-01-08 13:14:21
1.
wygląda na realizujesz zgodnie z dobrą zasadą
http://www.p-programowanie.pl​/cpp/tablice-dynamiczne/
oczywiście są wątpliwości co do wymiarów (ale to poprawiłeś więc może uwaga bezzasadna)

C/C++
tab =( int ** ) malloc( m + 1 );
// rezerwujesz (m+1)   ? nie widać abyś używał tab[m]  i < m

for( int i = 0; i < n; i++ )
     tab[ i ] =( int * ) malloc( n + 1 );
// tu podobnie n+1   ? nie widać byś używał

...
for( int i = 0; i < n; i++ ) // tu nie powinno być n ale m+1
     free( tab[ i ] );

free( tab );


2.
zapoznaj się z techniką debugowania programu
np. z
http://www.cprogramming.com​/debuggers.html

co pozwoli Ci uniknąć sytuacji opisywanej na tym portalu
http://www.cprogramming.com​/beginner_programming_mistakes.html

P-143119
« 1 »
  Strona 1 z 1