2016-11-10 1 views
0

메모리 예외를 받고 있지 않다. 그래서 내가 할이는 이유는 무엇</p> <pre><code>struct foo{ int a; int b; }; </code></pre> <p>가 지금은 2 개 항목의 배열을 만들려는이 데이터 구조를 가지고 있다고 가정 여기

struct foo* farry = (struct foo*) malloc(2 * sizeof(struct foo)); 

나는 2 개 슬롯 foo는 구조 기본 초기화 한 만들 것 잘못 위입니다 경우 제발 올바른? 그 맞습니까 ? 그럼 내가 그런 다음이

struct foo* farry = (struct foo*) malloc(2 * sizeof(struct foo)); 
    farry[0].a =1; 
    farry[1].a =2; 
    farry[2].a =3; 
    farry[3].a =4; 
    farry[4].a =5; 
    for(i=0 ; i<=4 ; i++) 
    { 
     printf("Value %d \n",farry[i].a); 
    } 

을 할 경우 왜 farry[2].a =3에서 그것은 메모리 오류가 발생한 것을 말해하지 않습니다. 대신 단순히 1,2,3,4,5를 인쇄합니다.

+0

C는 배열이 범위를 벗어남에 따라 매우 관대합니다. 범위를 벗어난 정의되지 않은 배열에 액세스하면 오류가 발생합니다. –

+2

http://stackoverflow.com/documentation/c/364/undefined-behavior#t=201611100730536038753 –

+0

@PrasunJajodia 올바르게 정리해 주셔서 감사합니다. 안정적으로 1,2를 얻는 것은 단지 2 개의 인덱스가 있기 때문에 정확합니다. –

답변

0

프로그램 및 사용자 공간에있는 힙의 제어되지 않은 위치에 액세스하기 만하면됩니다. 이 시점에서 아무 잘못도 메모리 오류가 없습니다.

단순히 힙의 다른 정적 변수를 사용하고 있습니다. 당신이 너무 많이 엉망으로하면 프로그램이 망가질 것입니다 (예를 들어, 어떤 이유로 프로그램이 쌓이거나 변수가 엉망이되어 루프가 망가질 경우). 예 C은 야생입니다.

+0

C++과 비교했을 때 실제로 매우 야생했습니다 –

+0

내 대답을 투표 해 주셔서 감사합니다! 이유는 모르겠다. – Djee

+0

나는 그것을 downvote하지 않았다. 그러나 나는 downvote에 대한 이유가 당신이 틀렸을 때처럼 싶습니다 upvoting 오전 –

관련 문제