나는 아직도 C에서 녹슬지 만 나는 이것을 알아 내지 못하고있다. 내가 뭘 하려는지 할당을 추적하고 free()에 대한 누락 된 호출을 디버깅 할 수 있도록 내 자신의 malloc을 구현하는 것입니다. 이 같은 헤더가 있습니다커스텀 malloc에 디버그 헤더 추가하기
typedef struct MemoryInfo {
mem_Kind kind;
unsigned int id;
struct MemoryInfo* prev;
struct MemoryInfo* next;
} MemoryInfo;
을 그리고 내 사용자 지정의 malloc은 다음과 같이 보입니다 :
void* my_malloc(mem_Kind kind, unsigned int size) {
MemoryInfo* mem;
allocCount++;
mem = (MemoryInfo*)malloc(sizeof(MemoryInfo) + size);
mem->id = id;
mem->kind = kind;
// set prev/next...
return mem + sizeof(MemoryInfo); // return pointer to memory after header
}
을하지만 매우 빠르게 꽤 무섭게 불면 때문에 나는 분명 내 포인터 연산이 잘못 얻고있다. 그러나 만약 내가 void* memory
내 구조체의 끝 부분에 추가하고 다른 malloc 다음 잘 할 것 같다, 그 문제는 내가 실제로 my_free
에서 헤더를 찾을 수 없다는 것입니다. 기본적으로 헤더를 앞에 추가하려고하므로 헤더를 무료로 가져 오기 위해 역방향 포인터 연산을 수행 할 수 있습니다.
void my_free(void* memory) {
MemoryInfo* mem = memory - sizeof(MemoryInfo); // not correct either
allocCount--;
free(mem);
}
여기서 내가 뭘 잘못하고 있니?
흥미 롭습니다. 매력처럼 작동합니다! void *가 작동하지 않는 이유를 설명 할 수 있습니까? char *로 캐스팅해야합니까? –
제발,보세요 http://stackoverflow.com/a/1666247/184968 –
아, 봐요. 감사. –