Почему malloc
выделяет 6 байтов char
типов, но мне нужно 2 байта. Если я выделяю 1 байт, он выделяет 5 байтов. Я не понимаю, почему.Malloc in C, Visual Studio
#include "stdlib.h"
int main()
{
char *lin = malloc(2);
lin[0] = 'a';
lin[1] = 'b';
char *line = (char *)malloc(sizeof(char) * 2);
line[0] = 'z';
line[1] = 'b';
printf("lin = %s\nline = %s\n", lin, line);
get_next_line(fd, line);
return (0);
}
Это показывает, что консоль
lin = ab¤¤¤¤
line = zb¤¤¤¤
Нет строковых терминаторов '' \ 0'', поэтому ваш код демонстрирует * неопределенное поведение *. Для этого вы должны выделить (по крайней мере) еще один байт памяти и сами написать терминаторы. –
Ваши строки 'lin' и' line' не имеют нулевого конца, последний символ строки должен быть '' \ 0'' (индекс 1 в вашем случае). В противном случае печать строки с printf печатает все до '' \ 0'', что является UB. – pbn
В любом случае диспетчер памяти не обязан выделять * любой * нечетный размер, поэтому при запросе 1 байт или 13 байт фактический размер может быть округлен до некоторого большего значения (например, 8 или 16 байт для пример). –