1

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);



}
4

1 に答える 1

1

いいえC。malloc() されたバッファをオーバーライドするための (組み込みの) テストはありません。1 つの malloc されたブロックの後、メモリ内に別の malloc されたブロックが見つかります。したがって、malloced バッファーを超えて書き込む場合は、他のブロックを変更するだけです。(これはもちろん非常に危険であり、コードの奇妙な動作を引き起こします。通常、予期しない結果と呼ばれます。)

于 2015-03-21T10:01:04.093 に答える