Итак, я читал код для класса, и я немного смущен тем, как переменная освобождается в C.
Приведенный код
#include<stdio.h>
main () {
int n=0;
char *p = "hello world";
while (*p!= 0) { // *p != '\0';
putc(*p, stdout);
p++;
}
printf("\np = %d", *p);
printf("\np = %d\n", p);
}
Итак, я понял, что вам не нужно освобождать память для char *, так как никаких mallocs не происходит, но я не понимаю, почему этот код не будет пропускать какую-либо память... Если вы увеличиваете указатель на строку и, таким образом, перемещая указатель на следующий блок памяти (1 байт), не потеряете ли вы начальную ссылку и все контрольные точки, которые вы увеличиваете? Как бы эта память была восстановлена без контрольной точки, если только она не будет сохранена компилятором до того, как этот тип операции произойдет. Я хотел бы получить некоторое представление о том, как это исправляется!