동적할당 버그

zzlzzh의 이미지

int형 배열 arr을 동적할당 했을때 주소를 건드리지도 않았는데 배열 중간의 값이 변하거나 쓰레기 값이 나옵니다.
그때문인지 invalid next size(fast)라는 오류도 뜨구요.
그냥 동적배열 때려치우고 arr[BUFSIZ]로 바꿔버려서 프로그램을 완성하긴 했는데, 도대체 건드리지도 않는 값이 왜 변하는지 알 수가 없습니다. 혹시 이유를 아시는분 계시나요?

...!의 이미지

바뀔리가 없지요. zzlzzh 님이 뭔가 잘못하신게지요. 정말로 원인을 알고 싶다면 질문을 어떻게 해야할까 생각을 잘 해보고 질문을 다시 작성해보세요.

지재민@Google의 이미지

바뀔리가 없는거 아는데 제가 수정한건

int *arr
MALLOC(arr, int, size); // malloc 매크로

이걸 그냥 동적할당 없이

int arr[BUFSIZ]

이걸로 바꾼것 뿐입니다.
동적할당 했을때 for문 돌면서 값 출력하면 처음엔 잘 뜨다가
재귀함수로 들어가면서 배열 값이 변합니다.
제가 아직 리눅스 gdb는 사용할줄 몰라서 왜 그런지 정확히 못하겠는데
동적할당만 안했다고 실행된다는건 이해가 안되네요.
찾아보니 gcc 컴파일러들에도 버전에 따라 여러 버그가 있다고 보았습니다.
그래서 혹시 버그가 아닌가 생각했는데... 확실하진 않으니 죄송하네요

ymir의 이미지

기계는 정직합니다. 사람이 시킨 일 외에는 하지 않죠.
코드가 그렇게 동작한다는 거는 만든 사람이 그렇게 만들라고 시킨거고..
그런 의도가 아니었다고 이야기 한다면, 의도와는 다르게 코드가 잘못 만들어졌다는 것입니다.

컴파일러도 사람이 만든거니 문제가 있을 수도 있다고 할 수 있겠지만..
어지간히 초 구닥다리 버전을 쓰는게 아니라면..
일단 발견될 수 있는 문제들은 다 처리되어서 없다고 보는게 맞겠지요.
일상 생활하다가 막 얻어 걸리는 수준의 문제들은 아니라는 뜻입니다.

우선적으로 내가 그렇게 동작하도록 프로그램을 만들었구나.. 라고 생각하시고..
다시 코드를 찬찬히 살펴 보세요.

되면 한다! / feel no sorrow, feel no pain, feel no hurt, there's nothing gained.. only love will then remain.. 『 Mizz 』

...!의 이미지

여전히 답을 얻을 수 없는 질문을 하시는군요. https://kldp.org/node/157387를 참고해서 컴파일 후에 어떤 에러를 얻는 지 확인해보시고 그래도 파악이 안되면 코드를 올리세요. 전체 코드가 복잡하다면, 문제를 재현하는 컴파일 작은 코드를 만들어서 올리시구요. 말씀하신 버그가 실제로 있다면 지금 세상이 이렇게 평온할 수 없어요. 난리가 났지요. 큰일나요. gcc/glibc가 얼마나 많은 곳에서 쓰이는지 생각해보세요.

익명 사용자의 이미지

링크가 잘못됐네요. https://kldp.org/node/157387 입니다.