Sembri confuso. Dimentica ciò che sai sui puntatori. Lavoriamo con gli 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
C'è un modo per noi di recuperare il vecchio valore o ha "filtrato" dal nostro punto di vista? In via ipotetica, supponiamo che ci si aspettasse che il sistema operativo sappia che hai finito con quel numero casuale, in modo che il sistema operativo possa eseguire alcune operazioni di pulizia.
è il vecchio valore richiesto per la generazione del nuovo valore? Come può essere, quando getchar
non può vedere x?
Consideriamo ora il tuo codice:
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
C'è un modo per noi di recuperare il vecchio valore, o ha "rubato" dal nostro punto di vista?Dovresti far sapere al sistema operativo quando hai finito con la memoria malloc
, chiamando free(variable);
.
è il vecchio valore richiesto per la generazione del nuovo valore? Come può essere, quando strdup
non può vedere la variabile?
Cordiali saluti, ecco un esempio di come potrebbe essere implementato strdup:
char *strdup(const char *original) {
char *duplicate = malloc(strlen(original) + 1);
if (duplicate == NULL) { return NULL; }
strcpy(duplicate, original);
return duplicate;
}
Non si deve usare 'new' come nome della variabile –
@ ale-batt Il nome della variabile è perfettamente bene a C. Tuttavia, posso capisci che il compilatore C++ non gli piace. Questa domanda è contrassegnata come C. Quindi, non vedo un problema. – hetepeperfan