超过为char分配的大小时不会出现分段错误*

时间:2015-03-21 09:51:50

标签: c memory-management malloc char-pointer

我使用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);



}

1 个答案:

答案 0 :(得分:1)

没有。在C中,没有(内置)测试用于覆盖malloc()的缓冲区。在一个malloced块之后你将在内存中找到另一个malloced块。因此,如果您在malloced缓冲区之外编写,则只需修改其他块。 (当然这是非常危险的并且会产生代码的奇怪行为:通常称为意外结果。)