我使用malloc为x分配n(y的字符串长度)个字节。然而,在将y复制到x后,我在x中又添加了3个字符,包括"\0",没有出现错误。
因为我只分配了10个字符的空间,所以我不应该在尝试为未分配的内存分配值时出错吗?这是未定义的行为吗?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int *argc,char **argv)
{
char *x,*y="123465412";
int i,n;
n=strlen(y);
x=(char *)malloc(sizeof(char)*n);
for(i=0; i<n ; i++)
x[i]=y[i];
x[i]='5';
x[i+1]='5';
x[i+2]=' ';
puts(x);
}
否。在C
中,没有覆盖malloc()缓冲区的(内置)测试。在一个有mallocated的块之后,您将在内存中找到另一个有Mallocated块。因此,如果您在mallocated缓冲区之外进行写入,只需修改其他块即可。(这当然是非常危险的,并且会产生代码的奇怪行为:通常称为意外结果。)