루프 내에서 동일한 변수를 여러 번 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));
}
예, 새로운 할당 때마다 얻을. 그리고 이전의 것들을 유출하십시오. –
예, 누출을 방지하려면 'var'를 다시로드하거나 다시 장착하기 전에 어딘가에서 이전 값에 대한 포인터를 유지해야합니다. 아래 @ Unh0lys0da에 의해 답변 됨, –
"변수를 mallocing"하지 않았습니다. 귀하의 코드는 5 개의 서로 다른 영역의 메모리를 할당하고 그 중 4 개의 주소를 잃어 버렸습니다. 5 번째 주소는 변수'var'에 저장됩니다. –