c-超过为字符*分配的大小时没有出现分段错误



我使用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缓冲区之外进行写入,只需修改其他块即可。(这当然是非常危险的,并且会产生代码的奇怪行为:通常称为意外结果。)

相关内容

  • 没有找到相关文章

最新更新