Die Frage ist also, wie verhindert der ursprüngliche Entwickler eine Situation, in der Benutzer/neuer Entwickler versucht, auf ein freies 'd Speicherelement zuzugreifen.Wie verhindert man undefiniertes Verhalten aus Sicht eines Anwenders/eines neuen Entwicklers?
int *num=(int *)malloc(n*sizeof(int));
int i;
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
for(i=0;i<n-1;i++){
temp = some_function(x);
}
free(num);
for(i=0;i<n;i++)
{
printf("\nnum[%d]= %d\n",i,num[i]);
}
S.S .: Der obige Code funktioniert und druckt tatsächlich Daten in Array. Was ist nicht unsere Absicht. [EDIT] Tut mir leid, wenn ich nicht klar genug war. Jemand hat vorgeschlagen, das als eine getrennte Frage zu stellen, ich dachte, warum nicht. Hier ist die original post
_Der obige Code funktioniert und druckt tatsächlich Daten in array._ .. Willkommen bei UB. –
[Bitte lesen Sie die Diskussion darüber, warum der Rückgabewert von 'malloc()' und Familie nicht in 'C' umgewandelt werden soll.] (Http://stackoverflow.com/q/605845/2173917). –
Der Code funktioniert auf einer bestimmten Plattform, wahrscheinlich in einem Debug-Build. Das Ausführen eines anderen Systems (oder eines Releasebuilds) kann zum Absturz führen. Es hängt vom Speicherzuordner ab. Einige Zuweiser werden nach dem Freiwerden Null setzen (oder alle Bytes auf etwas anderes setzen), so dass Sie dann andere Ergebnisse erhalten würden. – Neil