malloc 함수 질문입니다
찬솔
질문 제목 : malloc 함수 질문입니다질문 내용 :
#include iostream
using namespace std;
void function(int i);
int main()
{
int m=0;
cout 입력 : ;
cin m;
function(m);
return 0;
}
void function(int i)
{
int* arra = (int*) malloc(sizeof(int)*i);
int j;
if(arra == null)
{
cout 메모리 할당 endl;
exit(1);
}cout arra , *arra , &arra endl;for(j=0;ji;j++)
arra[j]=j+1;
for(j=0;ji;j++)
cout arra[j];
cout endl;;
free(arra);
}
-----------------------------------------------
int* arra = (int*) malloc(sizeof(int)*i);
(sizeof(int)*i)의 바이트 수 만큼 (int*)으로 타입캐스팅 해서 int* arra 에 대입 해라
이게 제대로 이해 한게 맞는가요?
이 코드에서는 m에 입력 받은 수만큼 배열의 길이를 동적으로 할당 받는 코드 같은데
만약에 7이라는 수를 입력하면 arra의 값은 arr = malloc(4*7)해서 28이되는건가요?
이해가 잘 안되서
소스 중간에
cout arra , *arra , &arra endl;
이렇게 arra 값을 출력 해봤는데
00291730, -842150451, 0012f6f0
이런결과가 출력 됩니다
첫번쨰와 3번째 결과는 매번 다르게 결과가 출력되는데
가운데 있는 수치는 고정이더군요. (똑같이 7을 입력했을떄)
int* arra = (int*) malloc(sizeof(int)*i);
이 부분이 가장 이해가 안되는것 같습니다.
책에는 메모리의 첫번째 주소를 리턴 한다고 하는데 그렇다면 값을 출력할때arra의 값만 따로 출력했을때는 28이 나와야
하지 않습니까?
sizeof(int) = 4 , i=7 이니까 둘을 곱하면 28 이자나요.
그런데 값을 출력하면 -842150451 이걸로 나오니 제가 무엇인가를 잘못 이해 하고 있는것 같습니다.
도와주세요
-
ComeOn 2023-12-27
-843...그 값은 쓰레기값입니다. 동적할당하고 *arr가 가르키는 값이 없잖아요.
그냥 arr라고 출력하시면 됩니다.