Articles of управление памятью

malloc для структуры и указателя в C

Предположим, я хочу определить структуру, представляющую длину вектора, и его значения: struct Vector{ double* x; int n; }; Теперь предположим, что я хочу определить вектор y и выделить для него память. struct Vector *y = (struct Vector*)malloc(sizeof(struct Vector)); Мой поиск через интернет показывает, что я должен выделить память для x отдельно. y->x = (double*)malloc(10*sizeof(double)); Но, […]

Отладка проблем с утечкой памяти без какого-либо инструмента

Интервьюер. Если у вас нет инструментов для проверки того, как вы обнаружите проблемы с утечкой памяти? Ответ. Я прочитаю код и посмотрю, была ли освобождена вся память, которую я выделил, в самом коде. Интервьюер не был удовлетворен. Есть ли другой способ сделать это?

Неудобства указателей на статические переменные

Я часто использую функции удобства, которые возвращают указатели на статические буферы, такие как: char* p(int x) { static char res[512]; snprintf(res, sizeof(res)-1, “number is %d”, x)); return res; } и использовать их повсюду в качестве аргументов для других функций: … some_func( somearg, p(6) ); …. Однако это «удобство» имеет раздражающий недостаток, кроме того, что он […]

Почему вы указываете размер при использовании 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 С […]

free () не освобождает память?

free(str); printf(“%d\n”, str->listeners); Вызов printf преемствует (как и любые другие вызовы членам str). Как это возможно?

печать полей структуры в c (распределение динамической памяти)

Я ноб на C и создаю эту программу, чтобы помочь мне учиться. objective состоит в том, чтобы добавить футболистов в команду и распечатать информацию. Я пытаюсь напечатать поля моей клубной структуры, но когда моя программа попадает на мой метод печати, все мои значения – мусор или адреса. Как я могу получить «реальные» значения #include #include […]

Сколько памяти calloc и malloc могут выделять?

Сколько памяти calloc и malloc могут выделять? Поскольку malloc и calloc могут динамически распределять память пример void *malloc (size_in_bytes); А calloc может выделять память в зависимости от количества блоков пример void *calloc (number_of_blocks, size_of_each_block_in_bytes);

Добавление `int` для адресации вызывает добавление int 4 раза

Для курса о функционировании операционных систем нам пришлось написать реализацию malloc / free для структуры определенного размера. Наша идея состояла в том, чтобы сохранить накладные расходы, такие как начало и конец указанного (статического) блока памяти, с которым должен работать наш код, в первых нескольких адресах этого блока. Однако, что-то пошло не так с вычислением последнего […]

Кто обрабатывает C ++ «новый» отказ в распределении памяти?

В C люди часто проверяют нулевые указатели после использования malloc. Однако в C ++ мы будем использовать «новый». Я сделал несколько поисков, и одно объяснение различий между malloc и new приведено ниже: https://isocpp.org/wiki/faq/freestore-mgmt#new-malloc-diff Цитата из ссылки выше: malloc () сообщает об исчерпании памяти, возвращая 0. новые отчеты о распределении и инициализации ошибок, бросая исключения (bad_alloc). […]

адрес локальной памяти действителен после возврата функции?

Возможный дубликат: Можно ли получить доступ к памяти локальной переменной за пределами ее объема? Я обновлял знания о том, как работает внутренняя память, и я столкнулся с путаницей. Вот пример кода int * func(){ int retval = 3; return &retval; } int main(void){ int *ptr = func(); printf(“address return from function %p and value %d\n”, […]