2010-06-03 4 views
1

최근 GCC 4.4.3을 사용하는 테스트 배포본으로 업데이트했습니다. 지금은 설정 한 모든 것을까지, 나는 코딩에 반환 한 내 프로젝트를 구축하고 나는이 끔찍한 메시지 중 하나가 얻을 :GCC, 함수 및 포인터 인수, 경고 동작

*** glibc detected *** ./boxyseq: free(): invalid pointer: 0x0000000001d873e8 ***

내가 절대적으로 여기 잘못 알고 있지만, 같은 다소 혼란스러워했다 동적으로 할당 된 데이터 구조를 해제하는 함수를 호출하는 C 코드를 보았을 때 - 완전히 다른 데이터 구조에 대한 포인터 인 호환되지 않는 포인터 유형을 전달했습니다.

warning: passing argument 1 of 'data_A_free' from incompatible pointer type 
note: expected 'struct data_A *' but argument is of type 'struct data_B *' 

이전에는 오류 였고 컴파일이 완료되지 않았기 때문에 혼란 스럽습니다. 이것은 C 프로그래머에게 삶을 더 어렵게 만들지 않을까요?

다른 경고 오류를 너무 많이 발생시키지 않고 오류로 다시 변경할 수 있습니까?

음모를 잃어 버렸는데 항상 경고 였나요?

+0

항상 경고 인 경우이 질문을 삭제하겠습니다. –

+0

오류를 만드는 방법을 알고 있다면 게시하십시오. 그것은 - 패 antic얼 오류로 덮여 있지만, 더 넓습니다. –

+0

@Matthew 그래서 항상 경고였습니다. 내가 알게되면 http://gcc.gnu.org/onlinedocs/gcc-4.4.0/gcc/Warning-Options.html을 통해 빠른 검색을하면 아무 것도 공개되지 않습니다. –

답변

2

항상 경고였습니다. C를 사용하면 다른 포인터에 대한 포인터를 암시 적으로 캐스트 할 수 있습니다. 단, 반은 컴파일러에서 경고합니다.

C++에서는 오류입니다. 아마도 그것이 당신이 생각한 것입니까?

GCC에서 -Werror=을 사용하여 경고로 바꿀 수 있지만이 경고에 대한 옵션이 표시되지 않습니다. 모두 경고를 오류로 바꾸기 위해 -Werror를 사용할 수는 있지만 원하는 것보다 더 많은 일을 할 수 있습니다.

0

이것은 분명히 clang analyzer이 잡을 것 중 하나이며, 따라서 clang을 사용하여 오류 건물을 만들 수 있습니다.

+0

gcc에서도 오류를 만들 수 있습니다 ('-pedantic-errors'). 문제는 다른 경고 오류를 피할 수 있다는 것입니다. –

+1

Eurrgghh, 위키피디아 페이지를 읽으십시오 : "GNU 컴파일러 컬렉션 (GCC)을 대체하는 것이 목표이며, 개발은 Apple이 후원합니다 ..."감사합니다. –