1
私は以下のように簡単なプログラムを書いています。メモリアクセス違反がcでエラーを起こさない
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char *a=NULL;
int i;
a = malloc(sizeof(char) *10);
memset(a,100,'\0');
if(a == NULL) printf("errr\n");
for(i=0;i<20;i++)
a[i]='c';
printf("%s",a);
printf("%d",strlen(a));
}
ここでは、10バイトしか割り当てずに20バイトを割り当てました。私はコードを正常にコンパイルし、セグメンテーションフォールトなしで実行します。
私の質問はなぜここにセグメンテーションフォールトを与えませんか?
これはあなたにsegフォルトを与える必要はありません。それは単純に[未定義の動作](http://en.cppreference.com/w/cpp/language/ub)です。 '作業'。 – George