Articles of malloc

Копирование n символов с strncpy более эффективно в C

Мне интересно, есть ли более чистый и эффективный способ сделать следующую strncpy учитывая max количество символов. Я чувствую, что переусердствовал. int main(void) { char *string = “hello world foo!”; int max = 5; char *str = malloc (max + 1); if (str == NULL) return 1; if (string) { int len = strlen (string); if […]

Заявление Malloc, дающее ошибку сегментации 11

Для проекта я изучаю использование malloc / realloc в c, но я не могу понять, почему этот код дает мне ошибку seg! #include #include #include #include typedef struct word_data word_data_t; typedef struct data data_t; typedef struct index_data index_data_t; struct word_data { int docunumber; int freq; }; struct data { char *word; int total_docs; word_data_t *data; […]

Как вернуть размер указателя, который я выделил с помощью malloc?

См. Этот пример! int main( int argc, char ** argv ) { int *ptr = malloc(100 * sizeof (int)); printf(“sizeof(array) is %d bytes\n”, sizeof(ptr)); } Функция printf возвращает только 4 байта! Что случилось? Спасибо!!!

Таинственный malloc: sysmalloc: ошибка с подтверждением утверждения

Я получаю загадочную ошибку, и я понятия не имею, почему. Этот код выполняется несколько раз перед сбоем, и он всегда терпит неудачу в той же точке. Вот мой код: assert(size > 0); int* sorted = malloc(size * sizeof(int)); И вот ошибка, которую я получаю, когда я запускаю ее: malloc.c:2369: sysmalloc: Assertion `(old_top == (((mbinptr) (((char […]

Как правильно использовать strtok в C, чтобы не было утечки памяти?

Я несколько смущен тем, что происходит, когда вы вызываете strtok в указателе char в C. Я знаю, что он изменяет содержимое строки, поэтому, если я вызову strtok для переменной с именем ‘line’, ее содержимое изменится. Предположим, что я следую ниже: void function myFunc(char* line) { // get a pointer to the original memory block char* […]

Динамически создавать массив строк с malloc

Я пытаюсь создать массив строк в C, используя malloc . Количество строк, которые будет удерживать массив, может меняться во время выполнения, но длина строк всегда будет постоянной. Я попытался это сделать (см. Ниже), но у меня проблемы, любые советы в правильном направлении будут высоко оценены! #define ID_LEN 5 char *orderedIds; int i; int variableNumberOfElements = […]

Неверный старый размер realloc

Отказ от ответственности: Это домашнее задание. Я пытаюсь это сделать и не ожидаю или не хочу, чтобы кто-то сделал это для меня. Только несколько указателей (хе-хе), где я ошибаюсь, будут оценены по достоинству. Домашнее задание требует от меня создания массива int* , содержащего 10 элементов, а затем попытаться вставить в него миллион ints. Каждая вставка […]

Почему вы указываете размер при использовании malloc в C?

Возьмите следующий код: int *p = malloc(2 * sizeof *p); p[0] = 10; //Using the two spaces I p[1] = 20; //allocated with malloc before. p[2] = 30; //Using another space that I didn’t allocate for. printf(“%d”, *(p+1)); //Correctly prints 20 printf(“%d”, *(p+2)); //Also, correctly prints 30 //although I didn’t allocate space for it С […]

Включен нулевой символ при распределении с помощью malloc

Я использую C для некоторого времени, и у меня есть эта тривиальная проблема, о которой я хочу запросить. Скажем, я хочу создать массив символов, который хранит до 1000 символов. Теперь, когда я использую malloc для этого же, тогда я задаю размер массива как 1001 символ [1000 символов + null] или всего 1000? Кроме того, скажем, […]

Как обновить другие указатели, когда realloc перемещает блок памяти?

Ссылка realloc говорит: Функция может переместить блок памяти в новое место, и в этом случае возвращается новое местоположение. Означает ли это, что если я это сделаю: void foo() { void* ptr = malloc( 1024 ); unsigned char* cptr = ( unsigned char* )ptr+256; ptr = realloc( ptr, 4096 ); } то cptr может стать недействительным, […]