Intereting Posts
Опция GCC -O2 нарушает эту небольшую программу или у меня есть неопределенное поведение Обозначение, которое я не могу понять в исходном коде Quake (C) Размеры массивов, объявленных указателями *** обнаружено glibc *** sendip: free (): недействительный следующий размер (нормальный): 0x09da25e8 *** структура realloc с функцией в C Процесс убийства, созданный с помощью popen2 Поиск номеров такси Насколько релевантно программирование Win32 для современных профессионалов? Как использовать функции библиотеки c library на языке ассемблера? Найти, если каждый четный бит установлен в 0 с помощью побитовых операторов Почему функция возвращает настройку массива по malloc, но не одну настройку «int cat = {0,0,0};» Как заставить пользователя ввести положительное целое число? Как структура «const» отличается от «структуры»? Массив переменной длины в структуре Чувство путаницы с – (- a) vs – (- a) в c

У меня возникают проблемы с распределением памяти со строками

У меня возникают проблемы с выделенной частью памяти моей программы. Я должен прочитать в файле, который содержит список имен, а затем выделить для них память и сохранить их в памяти выделения. Это то, что у меня есть до сих пор, но я все время получаю ошибку сегментации, когда я запускаю ее.

#include  #include  #include  #define MAX_STRING_LEN 25 void allocate(char ***strings, int size); int main(int argc, char* argv[]){ char **pointer; int size = atoi(argv[1]); allocate(&pointer, size); } /*Will allocate memory for an array of char pointers and then allocate those char pointers with the size of MAX_STRING_LEN.*/ void allocate(char ***strings, int size){ **strings = malloc( sizeof (char) * MAX_STRING_LEN); } 

В настоящее время это не работает, потому что мне дается ошибка seg. Большое спасибо за помощь заранее.

 void allocate(char ***strings, int size) { int i; // Here you allocate "size" string pointers... *strings = malloc( sizeof (char*) * size); // for each of those "size" pointers allocated before, here you allocate //space for a string of at most MAX_STRING_LEN chars... for(i = 0; i < size; i++) (*strings)[i] = malloc( sizeof(char) * MAX_STRING_LEN); } 

Итак, если вы передаете размер как 10 ...

В основном у вас будет место для 10 строк (указатель [0] на указатель [9]).

И каждая из этих строк может содержать до 24 символов (не забывайте о нулевом терминаторе) ...

Указатели немного сложны, но вот трюк, с которыми они справляются:

Допустим, у вас есть свой главный вид:

  int main() { int ***my_variable; } 

и вы знаете, как работать в my_variable внутри main ...

Чтобы использовать его в функции, выполните следующие действия:

добавьте лишний * в параметр

 void f(int ****my_param) 

и всякий раз, когда вы хотите использовать его внутри функции, используйте то же самое , что и в основном с этим небольшим изменением:

 (*my_param) = //some code 

используя (* my_param) то же самое, как если бы вы использовали my_variable в основном

Тебе нужно

 *strings = malloc(sizeof(char *) * 10); // Here is the array (*strings)[0] = malloc(MAX_STRING_LEN); strcpy((*strings)[0], "The first person"); printf("First person is %s\n", (*strings)[0]); 

Не знаю, где size