2016-05-26 12 views
0

Die Karten werden innerhalb der ersten richtig gedruckt, aber nachdem alles aufgeräumt ist. Das Board ist mit Zahlen gefüllt, die nur zu Debugging führen.Warum werden meine Boards komplett verschlüsselt?

int **allocMem(int nrows, int ncolumns){ 

    int **board = malloc((nrows + 1) * sizeof(int *)); 
    for(int i = 0; i < nrows; i++) 
    board[i] = malloc((ncolumns + 1) * sizeof(int)); 

    if (board == NULL) { 
    printf("\t\nERROR::memory allocation\n\n"); 
    free(board); 
    return 0 ; 
    } 

    return board; 
} 

Hier ist die Zuordnung zunächst, dann ist dieses Board ist

void makeBoard(int **board, int nrows, int ncolumns){ 
    int i = 0; 
    printf("board being created \n"); 
    for(int lines = 0; lines < nrows + 1; lines++){ 
    for(int collums = 0; collums < ncolumns + 1; collums++){ 
     (*board + lines)[collums] = i++; 
     printf("| %d ", (*board + lines)[collums]); 
    } 
    printf("| \n"); 
    } 
    printf("board after being created \n"); 
    for(int lines = 0; lines < nrows + 1; lines++){ 
    for(int collums = 0; collums < ncolumns + 1; collums++){ 
     printf("| %d ", (*board + lines)[collums]); 
    } 
    printf("| \n"); 
    } 
} 

und dies ist der Ausgang

enter image description here

+0

In 'allocMem':' für (int i = 0; i kaylum

+0

Warum fügen Sie beim Aufruf von 'malloc()' 1 zu 'nrows' und' ncolumns' hinzu? – Barmar

+0

http://ideone.com/KNjilJ – BLUEPIXY

Antwort

0

(*board + lines)[collums](*(board + lines))[collums] sein sollte, weil * höhere Priorität hat als +. Oder Sie können einfach board[lines][collums] schreiben, was die 2-dimensionale Beschaffenheit der Platine deutlich macht.

Im Allgemeinen ist x ein Zeiger, x[y] entspricht *(x+y).

+0

Danke Mann !!! Du bist toll !!! Kann nicht glauben, war nur das: D – m3k3r1

Verwandte Themen