2013-09-21 5 views
1

xcode 3.2.6이 포함 된 Mac OS X 10.6.8에서 -std = C++ 0x가 포함 된 프로그램을 컴파일하려고합니다. 내 g ++ 컴파일러를 g ++로 업 그레 이드했다.객체에 대한 malloc : *** 오류 0x1029249b0 : 해제 된 포인터가 할당되지 않았습니다.

:
$(CC) -c -Icore/include/ -Ianalysis/include -Ieventbuilders/include -Isimdut/include -Istyle/include $(CXXFLAGS) $< -o [email protected] 

그래서 난 그것을 변경 :

CXX   = g++ 
CXXFLAGS  = -std=c++0x 
LD   = g++ 
LDFLAGS  = -L. 

에 :

CXX   = g++-4.7 
CXXFLAGS  = -std=c++0x 
LD   = g++-4.7 
LDFLAGS  = -L. 

그러나,이 라인이 작동하지 않는 내 메이크 파일에서 나는에서 라인 변경

$(CXX) -c -Icore/include/ -Ianalysis/include -Ieventbuilders/include -Isimdut/include -Istyle/include $(CXXFLAGS) $< -o [email protected] 

모든 항목이 컴파일되지만 파일을 실행할 때 다음과 같은 오류가 발생합니다.

tbmon(25203) malloc: *** error for object 0x1029249b0: pointer being freed was not allocated 
*** set a breakpoint in malloc_error_break to debug 
Abort trap 

누군가 내가 잘못했는지 조언 해 줄 수 있습니까? 미리 감사드립니다.

+0

코드를 보지 않고도 이것이 컴파일러의 버그인지 (아마도 아님) 또는 코드의 버그인지는 거의 말할 수 없습니다. –

답변

1

malloc()으로 얻지 못한 포인터에 free()을 호출하는 프로그램에 버그가 있습니다. 또는이 동작을 트리거하는 코드의 메모리 관련 버그가 있습니다.

제공하신 파일은이 문제와 관련이 없습니다. 프로그램 코드를 수정해야합니다.

+0

C++이기 때문에'delete'를 호출 할 수도 있습니다. 그러면'free'를 사용하여 메모리를 해제합니다. –

+1

@MatsPetersson : 가능할 수 있습니다. 요점은 프로그램 코드가 버그이며 makefile이 그것을 고칠 가능성이 없다는 것입니다 : - | –

+0

동의합니다. –

0

컴파일러를 gcc에서 g ++로 변경하면 free(3)이 실패하지 않아야합니다. 문제를 보여주는 최소한의 예를 올리시겠습니까?

+2

프로그램의 동작이 정의되지 않은 경우 쉽게 그렇게 할 수 있습니다. 이 프로그램은 이미 버그가 있지만이 특정 증상을 나타내지 않았습니다. –

관련 문제