2011-04-28 7 views
2

1.메모리 할당

void main(void) 
{ 
    int *ptr1; 
    ptr1 = (int *)malloc(..); 
} 
내가 메모리 할당 PTR1 & PTR2을 위해 수행하는 방법을 물어보고 싶은

2.

void main(void) 
{ 
    static int *ptr2; 
    ptr2 = (int *)malloc(..); 
} 

?

+1

C에서 'malloc'의 반환 값을 캐스팅 할 필요가 없습니다. 또한,'void main (void)'는 최소한'int main (void)'이어야한다. –

답변

9

ptr1 포인터 자체가 스택에 할당됩니다. ptr1은 힙의 메모리를 가리 킵니다.

자체는 단지 프로그램 시작시 할당 (main가 호출되기 전에) 및 글로벌지만되는 ptr2 포인터가 그 범위에 선언되어 있기 때문에 단지 main에 볼 수 있도록 발생합니다. ptr2은 힙의 메모리를 가리 킵니다.

main 외부에있는 ptr2을 선언하면 그 아래 모든 기능에서 볼 수 있지만 저장 용량은 동일합니다.

+0

ptr2를 global로 만들더라도 현재와 같은 효과가 있습니다 – Aragorn

+0

'int * ptr2;를'main' 외부에 선언하면'ptr2'가 다른 모든 함수에서 볼 수 있다는 것을 제외하고는 똑같습니다 그것의 밑에,'main'뿐만 아니라. –

+0

도움 주셔서 감사합니다. – Aragorn