没有得到分段错误超过了被分配给一个char *的大小时,[复制](Getting no segmen

2019-10-22 08:07发布

这个问题已经在这里有一个答案:

  • C中的数组索引超出界限 10的答案

我使用malloc分配N(Y的字符串长度)为X字节。 复制Y到X后然而,我加入3-多个字符包括在X“\ 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]='\0';

    puts(x);



}

Answer 1:

号在C没有(内建)测试用于覆盖一个malloc()'编缓冲器。 一个malloced块后,你会发现在内存中的另一个malloced块。 所以,如果你写超越malloced缓冲区,你只需修改一些其他的块。 (这是非常危险的,当然还有会产生代码的怪异的行为:通常被称为意想不到的效果



文章来源: Getting no segmentation fault when exceeding the size that was allocated for a char * [duplicate]