2012-08-24 2 views
-1

C의 문 int ** p = NULL;에 대해서는 p, *p, **p의 메모리 할당에 대해 논의하십시오. 그것은 스택 또는 null 위치 또는 다른 곳에서있을 것입니다 ???메모리 할당 ** p

+0

하지만 대답은 토론해서는 안됩니다. 대신 특정 내용을 묻고 싶습니까? – cnicutar

+1

숙제 문제입니까? – peacemaker

+0

@peacemaker 아니요. 내 학교의 C 코스 포인터에서 발견 된 바로 이상한 질문입니다. – user1623827

답변

1

p은 스택에 int ** 포인터이고 값은 NULL입니다.

*p을 평가하려고하면 NULL을 참조 해제하려고 시도 할 때 런타임 오류가 발생합니다. 그러나 런타임 오류가 발생하지 않으면 메모리 위치 0의 값이됩니다.

**p을 평가하려고 시도하는 것이 불가능하므로 *p은 평가할 수 없습니다 (런타임 오류가 발생합니다). 그러나 *p이 런타임 오류를 일으키지 않으면 **p은 메모리 위치 0의 값이 가리키는 메모리 위치의 값이됩니다.

편집 : *p**p은 별도의 변수로 존재하지 않으므로 어디에도 할당되지 않습니다. 메모리에는 하나의 변수, p이 있으며 스택에 저장됩니다. 마치 int i = 10; 일 경우 묻는 것과 같습니다. 어디에 i * 5이 저장되어 있습니까?

+0

* p와 ** p는 할당받을 것입니다 ?? – user1623827

+0

만약'p'가 키워드'static'없이 함수에 정의되어 있으면 스택 상에있을 것입니다; 'p'가 함수 외부에 정의 된 경우 (또는'static' 키워드를 사용하지만 함수 내에있는 경우) 스택에 포함되지 않습니다. 'p' 자체의 주소는 'null 위치'에 있지 않습니다. –

+1

@ user1623827'* p'와'** p'는 프로그램을 만들지 않으면 할당되지 않습니다. 할당은 암시 적이 지 않습니다. –

1
  • p은 어딘가를 가리키는 변수입니다.
  • 해당 유형은 int**이며 이는 int에 대한 포인터를 가리킬 수 있음을 의미합니다. 메모리를 할당하는 코드를 작성하지 않은 이후
  • 는 어떠한 메모리 할당
  • .. p 자체 메모리 할당 당연히 제외 .. 일어나지 않는다 : 32 비트 어드레스 공간을 가정하여, 메모리의 4 바이트는에 할당 stack이고 해당 메모리 주소의 값은 0 (NULL)입니다.