작성
·
979
0
#include <stdio.h>
int main()
{
int n = 10;
int* ptr = NULL;
/* malloc */
ptr = (int*)malloc(n * sizeof(int));
n = 20;
int* ptr2 = NULL;
ptr2 = (int*)realloc(ptr, n * sizeof(int));
printf("ptr을 ptr2로 realloc 후 주소 비교 ptr vs ptr2\n");
printf("%p %p \n", ptr, ptr2);
printf("ptr을 ptr로 realloc 후 주소 비교 ptr vs ptr2\n");
ptr = (int*)realloc(ptr, n * sizeof(int));
printf("%p %p \n", ptr, ptr2);
}
굵은 줄로 표시된 라인에 접근 시, 위의 사진과 같은 오류가 발생합니다.
재할당된 포인터 ptr에 재접근 하여서 그런 것인가요?
그렇다고 생각이 되어,
ptr = (int*)realloc(ptr2,n*sizeof(int)); 로 접근하였는데도, 같은 오류가 발생합니다.
해당 오류의 원인이 무엇인지 궁금합니다!
답변 2
1
안녕하세요!
질문은 연관 강의에서 질문 주시기를 부탁드립니다.😀 그래야 제가 어떤 강의에서 질문을 주신 것인지를 알 수가 있고(저도 답변 드리기 위해 강의를 다시 돌려봐야하는데 이렇게 질문 주시면 어떤 강의에서 질문 주신 것인지 알 수가 없거든요ㅠㅠ) 다른 수강생 분들도 해당 강의 들으실 때 질문을 쉽게 참고하실 수 있습니다.
일단 답변을 드리자면
제 컴퓨터에서는 질문자님의 코드가 문제 없었습니다. 디버깅도 문제 없었습니다!
이 코드 자체도 제 견해로는 문제 없어보입니다. 기존에 ptr2가 가리키던 메모리는 해제하고 ptr2 에 새롭게 할당받은 메모리의 주소를 받고, ptr도 이 ptr2 값을 그대로 복사 받아서 새로 할당 받은 메모리를 ptr과 ptr2가 가리키는 모양이 됩니다. 문제 없어 보입니다.
제 컴퓨터에선 잘 돌아가고 코드상으로는 문제 없어보여서 저도 잘 모르겠네요 ㅠ ㅜ
0
답변 감사드립니다 !
제가 질문 시 주의사항을 제대로 읽지 않고 질문하여 불편을 드린 것 같아 죄송합니다ㅠㅠㅠ
컴퓨터마다 메모리 접근이 다를 수도 있는 것인지 참으로 신기하고 묘하네요 ㅎㅎㅎ
다시 한번 답변 감사드립니다 !