Если вы должны были сделать что-то вроде:В C - освобождение памяти в различных контекстах
char array[2][5] = {"cars", "tags"}
char array2[] = "computer";
Там было неявное выделение памяти, выделяемое равным (для первой строки):
sizeof(array); OR
sizeof(char*10);
Или, тем не менее, вы хотите это сделать.
В качестве альтернативы можно было бы сделать это:
char *ptr = "cars";
char *ptr2 = malloc(sizeof(*ptr2)*5);
*ptr2 = "cars";
Я знаю, что если вы используете указатели на явно выделить память с помощью таНос, то это хорошая практика, чтобы освободить этот указатель, используя свободный (PTR);
Однако, когда вы определяете вещи, как указано выше, следующие вызовы необходимы на тех же основаниях, что и явное выделение памяти?
free(ptr);
free(ptr2);
free(array);
free(array2);
- Как и в стороне, все вышеперечисленное delcarations/инициализации являются неявными нулевыми байтами, верно?
И можете ли вы использовать malloc только с указателями? Как и в случае, если вы создали массив, такой как array [] = malloc (sizeof (char) * 10) или что-то еще. Я понимаю, что массивы используют указатели внутри, но мне все же интересно, если это определено, поскольку в скобках [] размер не вводится. – sherrellbc
@sherrellbc, говоря, что «массивы используют указатели внутри», немного вводит в заблуждение. Ознакомьтесь с http://c-faq.com/aryptr/. –
@sherrellbc 'array [] = malloc (....)' неверный синтаксис. Если вы хотите поэкспериментировать с синтаксисом, есть несколько онлайн-компиляторов, которые делают эксперимент быстрым и в основном безболезненным, и вы можете делать это везде, где у вас есть браузер: http://stackoverflow.com/questions/3916000/online-c-compiler-and- оценщик –