int형 배열 arr을 동적할당 했을때 주소를 건드리지도 않았는데 배열 중간의 값이 변하거나 쓰레기 값이 나옵니다.
그때문인지 invalid next size(fast)라는 오류도 뜨구요.
그냥 동적배열 때려치우고 arr[BUFSIZ]로 바꿔버려서 프로그램을 완성하긴 했는데, 도대체 건드리지도 않는 값이 왜 변하는지 알 수가 없습니다. 혹시 이유를 아시는분 계시나요?
이걸로 바꾼것 뿐입니다.
동적할당 했을때 for문 돌면서 값 출력하면 처음엔 잘 뜨다가
재귀함수로 들어가면서 배열 값이 변합니다.
제가 아직 리눅스 gdb는 사용할줄 몰라서 왜 그런지 정확히 못하겠는데
동적할당만 안했다고 실행된다는건 이해가 안되네요.
찾아보니 gcc 컴파일러들에도 버전에 따라 여러 버그가 있다고 보았습니다.
그래서 혹시 버그가 아닌가 생각했는데... 확실하진 않으니 죄송하네요
여전히 답을 얻을 수 없는 질문을 하시는군요. https://kldp.org/node/157387를 참고해서 컴파일 후에 어떤 에러를 얻는 지 확인해보시고 그래도 파악이 안되면 코드를 올리세요. 전체 코드가 복잡하다면, 문제를 재현하는 컴파일 작은 코드를 만들어서 올리시구요. 말씀하신 버그가 실제로 있다면 지금 세상이 이렇게 평온할 수 없어요. 난리가 났지요. 큰일나요. gcc/glibc가 얼마나 많은 곳에서 쓰이는지 생각해보세요.
바뀔리가 없지요. zzlzzh 님이 뭔가
바뀔리가 없지요. zzlzzh 님이 뭔가 잘못하신게지요. 정말로 원인을 알고 싶다면 질문을 어떻게 해야할까 생각을 잘 해보고 질문을 다시 작성해보세요.
질문잡니다...
바뀔리가 없는거 아는데 제가 수정한건
int *arr
MALLOC(arr, int, size); // malloc 매크로
이걸 그냥 동적할당 없이
int arr[BUFSIZ]
이걸로 바꾼것 뿐입니다.
동적할당 했을때 for문 돌면서 값 출력하면 처음엔 잘 뜨다가
재귀함수로 들어가면서 배열 값이 변합니다.
제가 아직 리눅스 gdb는 사용할줄 몰라서 왜 그런지 정확히 못하겠는데
동적할당만 안했다고 실행된다는건 이해가 안되네요.
찾아보니 gcc 컴파일러들에도 버전에 따라 여러 버그가 있다고 보았습니다.
그래서 혹시 버그가 아닌가 생각했는데... 확실하진 않으니 죄송하네요
음 ..
기계는 정직합니다. 사람이 시킨 일 외에는 하지 않죠.
코드가 그렇게 동작한다는 거는 만든 사람이 그렇게 만들라고 시킨거고..
그런 의도가 아니었다고 이야기 한다면, 의도와는 다르게 코드가 잘못 만들어졌다는 것입니다.
컴파일러도 사람이 만든거니 문제가 있을 수도 있다고 할 수 있겠지만..
어지간히 초 구닥다리 버전을 쓰는게 아니라면..
일단 발견될 수 있는 문제들은 다 처리되어서 없다고 보는게 맞겠지요.
일상 생활하다가 막 얻어 걸리는 수준의 문제들은 아니라는 뜻입니다.
우선적으로 내가 그렇게 동작하도록 프로그램을 만들었구나.. 라고 생각하시고..
다시 코드를 찬찬히 살펴 보세요.
되면 한다! / 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
링크가 잘못됐네요. https://kldp.org/node/157387 입니다.
댓글 달기