인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

ws3240님의 프로필 이미지
ws3240

작성한 질문수

홍정모의 따라하며 배우는 C언어

_crtisvalidheappointer(block) 오류에 대해서 궁금합니다.

작성

·

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

ws3240님의 프로필 이미지
ws3240
질문자

답변 감사드립니다 !

제가 질문 시 주의사항을 제대로 읽지 않고 질문하여 불편을 드린 것 같아 죄송합니다ㅠㅠㅠ

컴퓨터마다 메모리 접근이 다를 수도 있는 것인지 참으로 신기하고 묘하네요 ㅎㅎㅎ

다시 한번 답변 감사드립니다 ! 

ws3240님의 프로필 이미지
ws3240

작성한 질문수

질문하기