我使用malloc为x分配n(字符串长度为y)字节。然而,在将y复制到x后,我又添加了3个字符,包括' \ 0'在x中,我没有错误。
由于我已经为足够的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]='\0';
puts(x);
}
答案 0 :(得分:1)
没有。在C
中,没有(内置)测试用于覆盖malloc()的缓冲区。在一个malloced块之后你将在内存中找到另一个malloced块。因此,如果您在malloced缓冲区之外编写,则只需修改其他块。 (当然这是非常危险的并且会产生代码的奇怪行为:通常称为意外结果。)