2017-11-13 2 views
-2

동일한 변수를 루프에서 여러 번 malloc 할 수 있습니까? 할당 할 때 새 메모리 주소를 할당 할 수 있습니까?동일한 변수를 여러 번 mloocing하여 C 코드

int* var; 
int i; 
for(i = 0; i < 5; i++) 
{ 
    var = (int*)malloc(sizeof(int)); 
} 

이 새로운 공간을 할당 하는가, 이것은 내가 실제로 그것을 사용하는 것이 어떻게 내가이 해제 될 수 있도록 주소가 링크 된 목록에 재 할당 될 수있는 상황에서 사용하는 것이 및 발생하지 것 아니다 메모리 주소.

+4

예, 새로운 할당 때마다 얻을. 그리고 이전의 것들을 유출하십시오. –

+0

예, 누출을 방지하려면 'var'를 다시로드하거나 다시 장착하기 전에 어딘가에서 이전 값에 대한 포인터를 유지해야합니다. 아래 @ Unh0lys0da에 의해 답변 됨, –

+1

"변수를 mallocing"하지 않았습니다. 귀하의 코드는 5 개의 서로 다른 영역의 메모리를 할당하고 그 중 4 개의 주소를 잃어 버렸습니다. 5 번째 주소는 변수'var'에 저장됩니다. –

답변

2

예 재 지정하기 전에 변수를 사용하여 작업하는 한 괜찮습니다. 그리고 '무언가'란 말은 포인터를 다시 할당하기 전에 복사본을 만들고 나중에 복사본을 무료로 호출하는 것입니다.

0

루프 내에서 동일한 변수를 여러 번 malloc 할 수 있습니까? 새 메모리 주소를 할당 할 수 있습니까?

malloc는 블록의 시작 부분에 대한 포인터를 리턴 크기 메모리 바이트의 블록을 할당한다. 그래서,이 for 루프 : 모든 반복에

for(i = 0; i < 5; i++) 
{ 
    var = (int*)malloc(sizeof(int)); 
} 

, malloc은 새로운 메모리 블록을 할당하고 var 변수에 할당지고 블록의 시작 부분에 대한 포인터를 반환. 그러나 "주소가 연결된 목록에 다시 할당됩니다."그래서 할당 된 메모리 참조를 어딘가에 유지한다고 가정 해 보겠습니다.

이이만큼 좋은 : 모든 반복에

int somevalue; 

for(i = 0; i < 5; i++) 
{ 
    somevalue = i+10; //Just assigning a value to variable 
} 

가 새 값이 somevalue 변수에 할당지고 있습니다. 루프가 끝나면 변수 somevalue은 루프의 마지막 반복에서 지정된 값을 갖게됩니다.

이 새로운 공간을 할당 하는가 ..

예를 한 malloc이 성공한다.


추가 참고 :

malloc 수익을 캐스팅하지 마십시오. 확인하십시오 this.

그래서, 당신은해야한다 :

for(i = 0; i < 5; i++) 
{ 
    var = malloc(sizeof(int)); 
} 
관련 문제