Wydajesz się zdezorientowany. Zapomnij o tym, co wiesz o wskaźnikach. Pracujmy z ints.
int x;
x = rand(); // Let us consider this the "old value" of x
x = getchar(); // Let us consider this the "new value" of x
Czy możemy odzyskać starą wartość, czy też "wyciekło" z naszego widoku? Jako hipotetyczny, załóżmy, że spodziewano się, że system operacyjny będzie wiedział, że skończyłeś z tą liczbą losową, aby system operacyjny mógł wykonać niektóre zadania porządkowania.
Czy stara wartość jest wymagana do wygenerowania nowej wartości? Jak to możliwe, gdy getchar
nie widać x?
Rozważmy teraz swój kod:
char *variable;
variable = (char*) malloc(sizeof(char*)); // Let us consider this the "old value" of variable
variable = strdup(word); // Let us consider this the "new value" of variable
Czy jest jakiś sposób dla nas, aby pobrać starą wartość, czy jest to „wyciekły” z naszego punktu widzenia?Oczekuje się, że system operacyjny zostanie poinformowany, gdy skończysz z pamięcią, dzwoniąc pod numer: free(variable);
.
Czy stara wartość jest wymagana do wygenerowania nowej wartości? Jak to możliwe, gdy strdup
nie widzi zmiennej?
FYI, oto przykład, jak może być realizowany strdup:
char *strdup(const char *original) {
char *duplicate = malloc(strlen(original) + 1);
if (duplicate == NULL) { return NULL; }
strcpy(duplicate, original);
return duplicate;
}
Nie należy stosować 'new' jako nazwy zmiennej –
@ Ale-płatu Nazwa zmiennej jest perfekcyjnie w C. Jednak mogę rozumiem, że kompilator C++ go nie lubi. To pytanie jest oznaczone jako C. Dlatego nie widzę problemu. – hetepeperfan