2014-11-18 2 views
0

malloc 함수를 다시 구현하기 위해 코딩하고 있습니다. 나는이void * pointer를 char * pointer에 할당 할 수 있습니까?

struct s_block{ 
    size_t size; // size per block 
    int free;  // whether free flag exist 
    t_block pre; 
    t_block next; 
    void *magic_ptr; 
    int padding; // bytes for padding 
    char data[1]; // first byte of data, i.e. the address returned from malloc 
}; 

typedef struct s_block *t_block; 
t_block get_block(void *p) { 
    char *tmp; 
    tmp = p; 
    ... 
} 

같은 이상한 코드가 사람의 예제 코드를 보았다하지만이 코드를 컴파일 ++의 gcc 나 g를 사용하여 오류가 "* 포인터를 숯불에 무효 * 포인터를 사용할 수 없습니다"입니다. 질문이 어디서 발생했는지 알고 싶습니다. gcc 또는 g ++? 코드가 잘못 되었습니까?

답변

1

을 다른 포인터에 캐스트하려면 명시 적 캐스트를 사용해야하며 다른 방법은 암시 적입니다.

char* temp = static_cast<char*> (p); 

초기 포인터 (현재 void *로 표시)는 char * 유형이어야하며 문제가 발생하지 않도록주의해야합니다.

++ C에서
3

당신은 명시 적으로 다른 유형으로 void* 캐스팅해야합니다 C에서

char *tmp = static_cast<char*>(p); 

그렇지 않은 당신이 캐스팅없이 포인터 타입에 void*을 할당 할 수 있습니다.

1

유효한 C 코드입니다. 오류는 (더 엄격한) C++ 표준에서 가져온 것입니다. C++로 컴파일하려면 포인터를 명시 적으로 char *에 캐스트하십시오.

관련 문제