#c #memory-management #malloc #dynamic-memory-allocation
#c #управление памятью #мэллок #динамическое выделение памяти
Вопрос:
Я работал над программой на c и застрял с выделением памяти для массива указателей на символ, мне нужно будет отсортировать этот массив в будущем. Массив должен хранить в нем символы, а затем я хочу отсортировать эти символы в алфавитном порядке.
#include lt;stdio.hgt; #include lt;string.hgt; #include lt;stdlib.hgt; typedef struct { char collection[50]; } data_col; int main(int argc, char const *argv[]) { data_col * array [10] = malloc(sizeof(data_col)); for (size_t i = 0; i lt; 10; i ) { scanf("%c", amp;array[i]-gt;group); } return 0; }
Комментарии:
1. В вашем коде так много ошибок, что невозможно угадать, чего вы хотите достичь. Пожалуйста, опишите, чего вы хотите. По крайней мере, предоставьте код, который можно скомпилировать. — По крайней мере, опишите, зачем вам нужен массив указателей.
2. Отредактировал вопрос
3. @Alessa Почему вы решили, что вам нужен массив указателей вместо массива объектов типа структуры?
4. Использование массива указателей имеет смысл, если вы будете его сортировать; вы можете поменять местами два элемента, просто поменяв местами их указатели вместо обмена 50 байтами данных.
Ответ №1:
Вы можете выделить память для своих 10 указателей, просто написав это:
data_col * array[10];
Если вы разместите это на верхнем уровне своей программы, это глобальная переменная, и вы можете использовать ее в любое время во время своей программы, и все указатели для вас будут инициализированы в нулевые указатели.
Если вы поместите его в функцию, то память будет освобождена/освобождена, когда функция вернется. Указатели будут запускаться в неинициализированном/неопределенном состоянии.
Обратите внимание, что вам все равно нужно инициализировать каждый из этих 10 указателей, прежде чем вы сможете использовать их для чего-либо. Вы можете выбрать использование malloc
для выделения пространства для отдельных data_col
объектов, или вы можете создать массив data_col
объектов, и ваши указатели будут указывать на этот массив. Однако ваш вопрос был не об этом; ваш вопрос просто о том, как выделить память для массива указателей, и код, который я показал выше, успешно выделяет эту память для вас.