为什么malloc
分配6个字节char
类型,但我需要2个字节。 如果我分配1个字节,他分配5个字节。 我不明白为什么。C,Visual Studio中的Malloc
#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'都不是以null结尾的,一个字符串的最后一个字符应该是''\ 0''(索引1在你的情况下)。否则,用printf打印一个字符串会打印所有内容,直到“'\ 0''这是UB。 – pbn
无论如何,内存管理器不需要分配*任何*奇数大小,因此当要求1个字节或13个字节时,实际大小可能会四舍五入到更大的值(如8或16个字节,用于例)。 –