x に n (y の文字列長) バイトを割り当てるために malloc を使用します。ただし、 y を x にコピーした後、 x に '\0' を含む 3 文字を追加しましたが、エラーは発生しませんでした。
割り当てられていないメモリに値を割り当てようとすると、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);
}