Почему malloc работает не так, как ожидается? - C (СИ)
Формулировка задачи:
int main()
{
int* p =malloc(sizeof(int));
p[100]=5;
printf("%s\n",strerror(errno));
printf("%d",*(p+100));
return 0;
}Решение задачи: «Почему malloc работает не так, как ожидается?»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
int main()
{
printf("first_brk __ %p\n",sbrk(0));
int* ptr = calloc(5,sizeof(int));
printf("ptr = %p\n", ptr);
printf("after_first_alloc_brk __ %p\n",sbrk(0));
char* char_ptr = calloc(3,sizeof(char));
printf("char_ptr = %p\n",char_ptr);
printf("after_second_alloc_brk __ %p\n",sbrk(0));
return 0;
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Устанавливается начальный адрес кучи (brk)
- Выделяется память под массив из 5 целых чисел
- Выводится адрес выделенной памяти (ptr)
- Вычисляется размер памяти, выделенной под массив (sizeof(int) * 5)
- Вычисляется начальный адрес кучи (brk) после выделения памяти
- Выделяется память под строку из 3 символов
- Выводится адрес выделенной памяти (char_ptr)
- Вычисляется размер памяти, выделенной под строку (sizeof(char) * 3)
- Вычисляется начальный адрес кучи (brk) после выделения памяти
- Возвращается 0, чтобы указать, что программа успешно завершилась