2017-07-09 5 views
0

Ich habe den Zeiger erstellt und Speicher zugewiesen. Dieser Speicher sollte die Nummer enthalten, die ich im Array-Stil durchlasse (1 Zahl = 1 Element), außerdem ist das 0-Element die Größe der Zahl. Ich stehe jedoch vor dem Problem, Daten innerhalb des zugewiesenen Speichers mit einem Zeiger zu ändern. Wenn ich meinen Code in der Hauptfunktion verwende, läuft alles perfekt, aber wenn ich eine andere Funktion erstellt habe und einen Pointer-Wert im Inneren übergebe, kann ich ihn nicht speichern (wenn die Zahl größer als 99999 ist und 6 Elemente benötigt) gelagert).Mit Speicher zugeordneten Zeiger innerhalb der Funktion

Die Hauptfunktion:

int *convNum=NULL; 

int main() { 
int num; 
convNum = malloc(sizeof(int)); 
if (convNum==NULL){ 
    printf("Allocation error\n"); 
    exit(0); 
} 

scanf("%d", &num); 
convNum[0] = numLength(num); 
printf("%d\n", convNum[0]); 
convertNum(num, convNum); 

for (int i = 1; i<=convNum[0]; i++){ 
    printf("%d", convNum[i]); 
} 

printf("\n"); 

return 0; 
} 

Die Funktion, dass ich versuche,

zu verwenden
int convertNum(int num, int * convNum){ 
int temp = num; 
int size = convNum[0]; 
convNum = realloc(convNum, sizeof(int)*(size+1)); 
if (convNum==NULL){ 
    printf("Allocation error\n"); 
    exit(0); 
} 
for (int i=size;i>0;i--){ 
    convNum[i] = temp % 10; 
    temp = temp/10; 
} 
return 0; 
} 

EDITED Die Ausgabe mit der Nummer Größe von weniger als 6 mir das Ergebnis gibt Ich brauchte. Die Ausgabe mit anderen Zahlen gibt mir eine defekte Größe (etwa -10349945820) und kein ordentliches Ergebnis.

+1

Mögliche Duplikate von [C - Zeiger als Funktionsargumente] (https://stackoverflow.com/questions/18698317/c-pointers-as-function-arguments) –

+0

Mögliche Duplikate von [C Programmierung: malloc() in einem anderen Funktion] (https://stackoverflow.com/questions/2838038/c-programming-malloc-inside-another-function) – melpomene

Antwort

0

Ihre Neuzuweisung überlebt Ihren Funktionsaufruf nicht convertNum. Sehen Sie dieses Thema in dem C-FAQ:

Pointer to pointer clarification

Sie die convNum Zeiger durch Verweis übergeben sollte.

+0

Danke, ich habe zu "int convertNum (int num, int ** convNumber)" und "convertNum (num, & convNum) ". Dann habe ich versucht "convNumber [i] = temp% 10;" innerhalb der Funktion, wie ich bei Zeiger auf Zeigerinfo gefunden habe. Es speichert jedoch alles in "ConvNumber", nicht in "ConvNum". Und wenn ich versuche "* convNumber [i] = temp% 10;" es führt zu einem Segmentierungsfehler. Bitte um Rat. Vielen Dank. –

+0

@MatthewDarens OK, warten Sie. Versuchen Sie nicht, eine weitere Frage in einem Kommentar zu posten. Nehmen Sie sich Zeit, um die neuen Informationen zu verarbeiten. Vielleicht lies noch mehr über Zeiger. Dann posten Sie eine andere Frage. Wir werden versuchen, Ihnen zu helfen. Wir werden Ihren Code NICHT für Sie schreiben. –

+0

Danke, ich versuche es jetzt zu beheben. –

Verwandte Themen