2012-03-14 2 views
0

난 내 프로젝트, 내가 사용하고 코드에 대한 tcpdump와의 mallocs를 기록하는 코드를 조금 사용하려고 해요 따라서입니다 할당 크기를 기록하려면 온라인으로 많은 비슷한 질문이 작동해야하지만, 내 사용자 지정 malloc 호출되는 것 같지 않습니다. 어떤 도움을 주시면 감사하겠습니다.재정의 malloc은

+1

다음을 확인하십시오 : http://stackoverflow.com/questions/262439/create-a-wrapper-function-for-malloc-and-free-in-c – LihO

+0

코드에서'malloc'을 재정의하거나 이미 컴파일되었습니다. 암호? 또한 매크로가 전역 수준에서 정의되어 있는지 확인하고, 'malloc'을 사용할 때마다 볼 수 있습니다. – Necrolis

답변

1

각 소스 파일의 malloc 매크로는 다시 #define이어야합니다. 따라서 매크로가 정의 된 헤더 파일을 포함시켜야합니다.

+0

이것은 문제가 아닙니다. 문제는'my_malloc'이 스스로를 호출한다는 것입니다. –

+0

이것은 OP가 요청한 것이 아닙니다. 미안합니다. 그러나 헤더 파일을''my_malloc()''을 정의하는 소스 파일에''#include ''하지 말고,''#include'' 대신에''stdlib.h'' 파일을 정의하십시오. 또한''malloc()''_after_ the''stdlib.h''를 재 정의하는 헤더 파일을 포함시켜야한다는 것을 명심하십시오. – ckruse

0

실제로는 malloc을 사용중인 파일에 define을 표시하지 않아야합니다. 모든 구현 파일에 포함 된 공통 헤더에 넣으십시오.

편집 : 문제가 함수 자체를 호출하는 경우 함수 선언 다음에 define을 이동해야합니다.

+0

malloc은 * 키워드 *가 아니며 기본 RT보다 우선 적용되는 경우 자유롭게 대체 할 수있는 함수 이름입니다. – Necrolis

+0

malloc은 키워드가 아닌 라이브러리 함수의 이름입니다. –

+0

'malloc'은 키워드 (예약 식별자)가 아니지만 다른 식별자 ('#define malloc __Malloc')에 대한 매크로로 구현 된 것 같습니다. –

0

실제 malloc을 호출 할 때 의 mallocmy_malloc에 의해 호출되는 것이 문제입니다. 그 이유는 전 처리기가 을 my_malloc으로 변환하기 때문입니다.

#define malloc(size) my_malloc(size) 

unsigned int memCount = 0; 

void *my_malloc(size_t size) { 
    void *p = malloc(size); 
    memCount = memCount + size; 
    printf("Memory Allocated :%zu \n", size); 
    return p; 
} 

int main(void) { 
    malloc(123); 
    return EXIT_SUCCESS; 
} 

실제로 얻을 것이다 :

unsigned int memCount = 0; 

void *my_malloc(size_t size) { 
    void *p = my_malloc(size); 
    memCount = memCount + size; 
    printf("Memory Allocated :%zu \n", size); 
    return p; 
} 

int main(void) { 
    my_malloc(123); 
    return 0; 
} 

당신은 here을 입증하는 실제 malloc에 액세스 할 필요가

우리는 간단하게 다음과 같은 사전 처리합니다.