struct data{
int data1;
int data2;
};
여기서
ptr = malloc(sizeof(struct data)); 이렇게하면
구조체 한개크기가 할당되잖아여
근데 ptr = malloc(sizeof(struct data)*4)이렇게하면
구조체 4개가 할당 되는건가여?
두번째 세번째 네번째 구조체참조는 어떻게하나여?
struct data{
int data1;
int data2;
};
여기서
ptr = malloc(sizeof(struct data)); 이렇게하면
구조체 한개크기가 할당되잖아여
근데 ptr = malloc(sizeof(struct data)*4)이렇게하면
구조체 4개가 할당 되는건가여?
두번째 세번째 네번째 구조체참조는 어떻게하나여?
(ptr+i)->data1같은식으류 하죠
크기만알려줬는데 어떻게 data1과 data2의 자리를 인식을하는거죵?
걍 편하게 struct data* dataArr라 이름 붙이고 dataArr[1] 뭐 이러허케 습니다
그래서 ptr은 해당 구조체 포인터여야 하구 malloc으로 받은 void포인터도 그 구조체 포인터로 캐스팅해줘야죠
ㄴ 그렇게하면 알아서 인식을하나요?? ...신기하다
malloc은 그냥 힙영역에 사용 가능한 메모리 덩어리를 만들어주는 거고 그 덩어리의 첫번째 주소를 반환하는 거고 그 덩어리를 적당히 잘라 쓰는 방법이 (data*)같은 걸로 캐스팅하는 거라 보면 되지 않을까요
ㄴ근데 힙은 계속써지나요? 제가 힙사이즈를 8로 할당하고 for문으로 dataArr[i] = i 이런식으로 계속 쓰게했는데 gdb로 디버깅하니까 할당해준영역을 넘어져서 계속써져요 왜이렇죠? 이러면 할당해주는 의미가없는거아닌가요?
이해력이 매우 좋으신 질문자분이네
ㄴ 죄송해요 .... 제가 기본도안되어있어서 이상하게 이해하는거 같네요
할당해준 영역을 넘어서 계속 참조가 된다구여?
테에엥
그건 아마 c의 배열 범위 체크의 헐렁함 문제가 아닐지
멍멍이// 네 for(i=0; i<100;i++) ptr[i] = i; 이렇게하고 끝까지 돌린다음에 메모리보면 원래할당했던 사이즈8을 넘어서 다써지는데요...
할당해준 사이즈를 넘어서 참조할수있는거랑 별개로 할당을 해줘야 그부분을 사용하는게 되는거고 다음에 다른걸 할당할때 그부분을 피해서 할당해주죠