У меня проблемы с пониманием, когда освободить указатель на указатель.Для массивов я понимаю, что что-то вроде:
char **mat = (char**) malloc(sizeof(char*) * 100);
for(int i = 0; i < 500; i++)
mat[i] = (char*) malloc(sizeof(char) * 50);
потребует
- освобождения каждого i-го члена переменной mat с последующим окончательным свободным вызовомдо корня (коврик **).Это интуитивно понятно, потому что каждый malloc получает бесплатно.
Однако, когда я делаю что-то вроде этого:
char *str = (char *) malloc(100 * sizeof(char));
char **pstr = &str;
free(pstr);
Я обнаруживаю, что это говорит мне, что я пытаюсь освободитьневерный указательМоя логика заключается в том, что pstr
является указателем на указатель на массив символов malloc - освобождение pstr
должно освободить str
.Вместо этого я получаю неверный указатель.Что дает?