2016-04-07 9 views
0

Diese Frage aus zuvor gestellten Fragen von zwei Builds: C++ Passing a dynamicly allocated 2D array by reference & C - Pass by reference multidimensional array with known sizeVergeben Sie einen dynamischen 2d-Array, indem sie es auf eine andere Funktion als Verweise

Ich habe versucht, Speicher für ein 2D-Array zuweisen, die Antworten von diesen mit vorherige Fragen, aber der Speicher wurde nie zugewiesen und ich erhalte jedes Mal einen BAD_ACCESS Fehler, wenn ich versuche auf das Array zuzugreifen! Diese

ist, was ich habe:

const int rows = 10; 
const int columns = 5; 

void allocate_memory(char *** maze); //prototype 

int main(int argc, char ** argv) { 
    char ** arr; 
    allocate_memory(&arr) //pass by reference to allocate memory 
    return 0; 
} 

void allocate_memory(char *** maze) { 
    int i; 
    maze = malloc(sizeof(char *) * rows); 
    for (i = 0; i < rows; ++i) 
     maze[i] = malloc(sizeof(char) * columns); 
} 
+1

Kleiner Punkt belegen: Warum verwenden Sie '10' für die' malloc' Anruf, wenn Sie hast 'rows' definiert, die du unmittelbar danach benutzt? –

+1

Bitte versuchen Sie nicht, ein [Drei-Sterne-Programmierer] (http://c2.com/cgi/wiki?ThreeStarProgrammer) zu sein. Abgesehen davon, dass C technisch nicht "per Referenz" weitergegeben wurde, kann man es nur emulieren *. –

+0

War ein Tippfehler, ich habe es bereits behoben. Danke für die Benachrichtigung – Insty1956

Antwort

3

Zuerst sollte man beachten, dass es keine Pass von Referenz in C, nur Pass von Wert.

Nun müssen Sie Speicher für maze[0] (oder *maze)

*maze = malloc(sizeof(char *) * rows); 

und dann

for (i = 0; i < rows; ++i) 
    (*maze)[i] = malloc(sizeof(char) * columns); 
+1

kann ich '* maze' anstelle von' maze [0] 'verwenden? ist es das Gleiche? – Insty1956

+0

@JoachimPileborg Also, was ist die richtige Antwort? – Insty1956

+3

@ Insty1956 ja, denken Sie daran, '(* Labyrinth)' zu schreiben, wenn Sie '' '' nach –

Verwandte Themen