Ich habe einen Segmentierungsfehler im folgenden Code, aber nachdem ich es in Zeiger auf Zeiger geändert habe, ist es in Ordnung. Kann mir irgendjemand irgendeinen Grund geben?Warum Zeiger auf Zeiger erforderlich ist, um Speicher in Funktion zu reservieren
void memory(int * p, int size) {
try {
p = (int *) malloc(size*sizeof(int));
} catch(exception& e) {
cout<<e.what()<<endl;
}
}
es nicht in der Hauptfunktion als Schlag
int *p = 0;
memory(p, 10);
for(int i = 0 ; i < 10; i++)
p[i] = i;
jedoch nicht funktioniert, funktioniert es so.
void memory(int ** p, int size) { `//pointer to pointer`
try{
*p = (int *) malloc(size*sizeof(int));
} catch(exception& e) {
cout<<e.what()<<endl;
}
}
int main()
{
int *p = 0;
memory(&p, 10); //get the address of the pointer
for(int i = 0 ; i < 10; i++)
p[i] = i;
for(int i = 0 ; i < 10; i++)
cout<<*(p+i)<<" ";
return 0;
}
Wie Malloc nie werfen wird, sind diese Versuche Blöcke sinnlos. –
Diese try-Blöcke sind nicht gültig, wenn dies C ist. Ist das eigentlich C++? Wenn dies der Fall ist, müssen sich die Tags ändern. –
@Fred, die Frage ist relevant für beide C, auch wenn das Snippet C++ ist, wie Sie hingewiesen haben. Ich habe das C++ - Tag hinzugefügt – hhafez