Betrachten wir zwei Fälle von den Aufruf einer Funktion:C - Funktionsparameter und Zeiger
void Convert(int number, int **staticPointer)
{
int * dynamicPointer = malloc(sizeof(int));
*dynamicPointer = number;
*staticPointer = dynamicPointer;
}
int main()
{
int *p;
Convert(5, &p);
printf("The number is: %d", *p);
free(p);
}
Die oben genannten Arbeiten schön ohne Probleme.
nun der Fall unter:
void Convert(int number, int *staticPointer)
{
int * dynamicPointer = malloc(sizeof(int));
*dynamicPointer = number;
staticPointer = dynamicPointer;
}
int main()
{
int *p;
Convert(5, p);
printf("The number is: %d", *p);
free(p);
}
Dies verursacht SEGFAULT. Beachten Sie, dass ich die Funktion auf verschiedene Arten mit verschiedenen Parametern anrufe, und ich verstehe, dass der Unterschied im Aufruf der Funktion liegt.
Kann mir bitte jemand erklären, warum ich die Funktion wie im ersten Beispiel aufrufen muss, und warum das andere Beispiel nicht funktioniert (es stürzt in main ab)?
Der Zweck meines Programms ist es, einen statischen Zeiger auf eine bestimmte Speicheradresse durch eine Funktion zu verweisen.
Die erste ändert den Zeiger in der 'main()' -Funktion; die zweite ändert die Kopie des Zeigers in der 'Convert()' Funktion, ändert aber nicht den Zeiger in der 'main()' Funktion, so dass der Zeiger in 'main()' nicht initialisiert ist und Sie Glück haben einen Absturz bekommen, um zu sagen, dass du es falsch machst (das war nicht garantiert). –