정적할당(malloc)을 넘기지 않았을때 값이 달라져요
새늘
2023.04.01
질문 제목 :- 질문 요약 :- 질문 내용 : 소스로 대체하겠습니다.
#include stdafx.h
#include stdlib.h
int* mat_mult(int m[], int n);
void _tmain(int argc, _tchar* argv[])
{
int ma[4]={1,2,3,4};
int *mb,i;
for(i=0; i4; i++)
{
printf(ma[%d]=%2d , i, ma[i]);
}
printf(\n);
mb=mat_mult(ma,4); //콜 바이 레퍼런스로 넘겨받습니다.
for(i=0; i4; i++)
{
printf(mb[%d]=%2d , i, mb[i]); //여기서 쓰레기값이 나옴, mb[i]
}
}
int* mat_mult(int m[], int n)
{
int mc[4];
for(int i=0; in; i++)
mc[i]=m[i]*n;
return mc;
}
왜 이렇게 되는지 이해가 안되요 ㅠㅠ
1시간생각해봐도 모르겠네요
-
리라
mc 는 지역변수죠 리턴되면서 메모리는 반환이 되고 리턴시킨 mc의 주소값은 반환된 메모리 주소를 그대로 가르키기 때문에 쓰레기 값이 출력되는 겁니다.
mc 값 쓰여짐 - mc의 주소값 반환 - 함수를 빠져나오며 지역변수 mc 메모리 삭제됨 - mc의 주소값이 가르키고 있는 메모리 주소에는 아무것도 없음.