Ist die Wiederverwendung von Zeigern nach dem Freigeben der Daten, auf die sie verweisen, sicher und vorhersehbar?Ist es sicher, Zeigervariablen wiederzuverwenden, nachdem sie freigegeben haben, worauf sie zeigen?
Zum Beispiel:
char* fileNames[] = { "words.txt", "moreWords.txt" };
char** words = NULL;
int* wordsCount = NULL;
for (i = 0; i < 2; ++i) {
data = fopen(fileNames[i], "r");
words = readWords(data);
wordsCount = countWords(words);
free(wordsCount);
for (j = 0; words[j]; ++j)
free(words[j]);
free(words);
fclose(data);
}
* Fehlerprüfung
weggelassenich den Code laufen lasse und es scheint zu laufen (keine Warnungen, Fehler oder Probleme mit dem Speicher), aber ich frage mich, ob dies sicher ist und vorhersehbar in den meisten Umgebungen (speziell in einer typischen Linux-Umgebung) zu verwenden?
Wenn dies nicht "sicher und vorhersehbar" ist, was ist der beste Weg, die gleichen Operationen an zwei verschiedenen Dateien durchzuführen, ohne die doppelte Anzahl an Zeigern usw. zu erstellen?
EDIT: ich frage, ob es um die Wiederverwendung eines Zeigers Variable nach Freigabe in Ordnung ist, was es deutete auf. Ich verstehe, dass Sie keinen Zeiger Wert nach dem Freigeben verwenden sollten. Angenommen, der Code funktioniert einwandfrei (es funktioniert wie vorgesehen, der Speicher wird ordnungsgemäß freigegeben und so). Ich kann die Spezifikation nicht ändern. für diese Aufgabe.
Danke!
Ich sehe nirgends in Ihrem Code, wo Sie nichts wiederverwenden, nachdem Sie es freigegeben haben. –
Sie sollten Ihre Wordcount-Funktion einen int zurückgeben, anstatt int * ... Platz für ein int in diesem Kontext vergeben ist sinnlos ... –
Ich lese in zwei verschiedenen Dateien und die gleichen Operationen (readWords, countWords, etc) für jede Datei. Für mich bedeutet dies, dass ich die Zeiger "wiederverwenden" würde, aber sie würden auf verschiedene Stellen (möglicherweise) bei jeder Iteration der Schleife zeigen. –