dkgfued   8달 전

스티커문제를 풀다가 동적메모리로 한번 풀어보려고 하는데요.

윗부분은 코드이고 아랫부분은 gdb 로 돌렸습니다만 왜 에러가 나는걸까요?

똑같이해준 space는 정상적으로 작동 되는데..

혹시 memset이 오류일까요?

pl0892029   8달 전

memset이 무슨 기능을 위해 들어갔는지를 생각하시고 다시 코드를 보시길 바랍니다.

결과적으로 memset이 문제입니다.

dkgfued   8달 전

그걸 알았으면 질문을 안했을텐데...해결방안 좀 알려주시면 안될까요?

pl0892029   8달 전

dkgfued

cache 위치의 값을 sizeof(cache) (int** 크기) 만큼 지우셨으니 cache[0] 에 접근하면 터지게 됩니다.

cache[0], cache[1] 에 있는 쓰레기값들을 초기화하는게 의도라고 가정하겠습니다.

아래처럼 하시면 초기화 됩니다.

dkgfued   8달 전

cache[0] 의 크기가 int[2*N] 인데 chche[0] * 2 * N 하면 더 크게 되지 않나요?

pl0892029   8달 전

조금 더 자세히 써주시겠어요?

값이 몇이 되서 더 커질것 같다. 하는 얘기를 해주시면 더 도움될 것 같아요 :)...

제가 틀렸을수 있으니 부담없이 여쭤보셔도 되요

dkgfued   8달 전

말씀대로 바꿔보니 되네요!

뭐좀 물어봐도 될까요?

제가 cache[0] 를 new int[2 * K] 로 메모리 할당을 해주었는데

어째서 sizeof(cache[0]) 의 크기로 memset을 하는게아니라

sizeof(cache[0]) * 2 * K 의 크기로 하는 것인가요?


K 가 3이면 cache에 6크기의 배열이 생기는데

sizeof(cache[0]) 하면 int * 6 이 나오지 않나요?

sizeof(cache[0]) * 2 * K 하면 int * 6 * 2 * 3 인것 같아서요...


pl0892029   8달 전

sizeof(cache[0])를 직접 찍어보세요. :)

배열과 포인터의 크기에 대해 찾아서 공부하시면 많은 도움 되실거에요. 

dkgfued   8달 전

cache[0][0] 이라면 이해가 가는데... 그건 좀 이해하기가 어렵네요..

dkgfued   8달 전

이해했습니다. 감사합니다.

포인터라 4바이트만 리턴하는군요...

dkgfued   8달 전

헌데 위 소스 그대로 돌렸더니 이번엔 free()에러가발생하네요ㅠㅠ이번엔뭐가문제일까요??

댓글을 작성하려면 로그인해야 합니다.