Вы выделили память для x
, а затем присвоили ее элементу массива
char *x = (char *) malloc(10 * sizeof(char));
//...
y[0] = x;
Таким образом, вы можете освободить память таким же образом, но в обратном порядке
free(p[0]);
free(p);
Важной информацией для free
является фактический адрес, который был возвращен malloc
и т. Д., Независимо от того, где он хранится.Запись о том, сколько памяти было выделено, хранится внутри системы.Вы знаете, сколько, потому что это вы сделали это.