Как выделить память для массива указателей на символ в c

#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 объектов, и ваши указатели будут указывать на этот массив. Однако ваш вопрос был не об этом; ваш вопрос просто о том, как выделить память для массива указателей, и код, который я показал выше, успешно выделяет эту память для вас.