Вопросы с тегом «malloc»

Функция malloc выполняет динамическое выделение памяти в C и является частью стандартной библиотеки. Используйте этот тег, чтобы задать вопросы об использовании, поведении и реализации malloc.

2409
Я использую результат malloc?

В этом вопросе кто-то предложил в комментарии, что я не должен приводить результат malloc, т.е. int *sieve = malloc(sizeof(int) * length); скорее, чем: int *sieve = (int *) malloc(sizeof(int) * length); Почему это...

780
Разница между malloc и calloc?

В чем разница между выполнением: ptr = (char **) malloc (MAXELEMS * sizeof(char *)); или: ptr = (char **) calloc (MAXELEMS, sizeof(char*)); Когда стоит использовать calloc вместо malloc или

538
Что ДЕЙСТВИТЕЛЬНО происходит, когда вы не освобождаетесь после malloc?

Это было то, что беспокоило меня целую вечность. Нас всех учат в школе (по крайней мере, так было), что вы ДОЛЖНЫ освободить каждый указатель, который выделен. Мне немного любопытно, однако, о реальной стоимости не освобождения памяти. В некоторых очевидных случаях, например, когда mallocвызывается...

479
В каких случаях я использую malloc и / или new?

Я вижу, что в C ++ существует несколько способов выделения и освобождения данных, и я понимаю, что при вызове mallocвы должны вызывать, freeа когда вы используете newоператор, вы должны deleteвыполнять сопряжение, и смешивать их два - ошибка (например, вызов free()чего-то, что было создано с...

401
Почему использование alloca () не считается хорошей практикой?

alloca()выделяет память в стеке, а не в куче, как в случае malloc(). Итак, когда я возвращаюсь из рутины, память освобождается. На самом деле это решает мою проблему освобождения динамически выделяемой памяти. Освобождение памяти, выделенной через malloc()это, является большой головной болью и,...

276
Как работают malloc () и free ()?

Я хочу знать, как mallocи freeработать. int main() { unsigned char *p = (unsigned char*)malloc(4*sizeof(unsigned char)); memset(p,0,4); strcpy((char*)p,"abcdabcd"); // **deliberately storing 8bytes** cout << p; free(p); // Obvious Crash, but I need how it works and why crash. cout << p;...

256
Почему malloc + memset медленнее, чем calloc?

Известно, что callocон отличается от mallocтого, что инициализирует выделенную память. С callocпомощью памяти устанавливается на ноль. С mallocпамятью не очищается. Таким образом , в повседневной работе, я считаю , callocкак malloc+ memset. Кстати, ради интереса я написал следующий код для теста....

158
Почему в книге «Язык программирования C» написано, что я должен вызывать malloc?

Сегодня я достиг страницы 167 языка программирования Си (второе издание Брайан В. Керниган и Деннис М. Ричи) и обнаружил, что автор говорит, что я должен сыграть malloc. Вот часть из книги: 7.8.5 Управление хранением Функции malloc и calloc динамически получают блоки памяти. void *malloc(size_t n)...

156
Установка переменной в NULL после освобождения

В моей компании есть правило кодирования, которое гласит, что после освобождения памяти сбросьте переменную в NULL. Например ... void some_func () { int *nPtr; nPtr = malloc (100); free (nPtr); nPtr = NULL; return; } Я чувствую, что в случаях, подобных приведенному выше коду, установка значения...

155
Несовместимое неявное объявление встроенной функции 'malloc'

Я получаю эту ошибку: предупреждение: несовместимое неявное объявление встроенной функции 'malloc' Я пытаюсь сделать это: fileinfo_list* tempList = malloc(sizeof(fileinfo_list)); Просто для справки используемая структура: typedef struct { fileinfo** filedata; size_t nFiles; size_t size; size_t...

114
В чем разница между vmalloc и kmalloc?

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

110
Malloc vs new - разные обивки

Я просматриваю чужой код C ++ для нашего проекта, который использует MPI для высокопроизводительных вычислений (10 ^ 5 - 10 ^ 6 ядер). Код предназначен для обеспечения связи между (потенциально) разными машинами на разных архитектурах. Он написал комментарий, в котором говорится примерно следующее:...

110
Причудливый способ размещения двумерного массива?

В проекте кто-то выдвинул эту строку: double (*e)[n+1] = malloc((n+1) * sizeof(*e)); Что предположительно создает двумерный массив из (n + 1) * (n + 1) удвоений. Предположительно , я говорю, потому что до сих пор ни один из тех, кого я спрашивал, не мог сказать мне, что именно это делает, ни откуда...

96
Использует malloc для поведения int undefined до C ++ 20

Мне сказали, что следующий код имеет неопределенное поведение до C ++ 20: int *p = (int*)malloc(sizeof(int)); *p = 10; Это правда? Аргументом было то, что время жизни intобъекта не начинается до присвоения ему значения ( P0593R6 ). Для устранения проблемы newследует использовать размещение: int *p...

86
Почему я получаю ошибку утверждения C malloc?

Я реализую полиномиальный алгоритм «разделяй и властвуй», поэтому могу сравнить его с реализацией OpenCL, но не могу приступить mallocк работе. Когда я запускаю программу, она выделяет кучу данных, кое-что проверяет, а затем отправляет size/2в алгоритм. Затем, когда я mallocснова нажимаю на линию,...

84
Почему `free` в C не берет количество байтов, которые нужно освободить?

Чтобы быть ясным: я знаю, что mallocи freeони реализованы в библиотеке C, которая обычно выделяет фрагменты памяти из ОС и выполняет собственное управление для распределения меньших объемов памяти для приложения и отслеживает количество выделенных байтов. . Этот вопрос не в том, как бесплатно...