>

이 기사 를 읽는 동안 다음 단락을 발견했습니다.

와이즈 비즈 와이즈 비즈      이 코드는 int * 및 char *가있는 아키텍처에서 오작동 할 수 있습니다   자유는 후자의 포인터를 기대하기 때문에 다른 표현   유형.

이것이 내가

Pointers to objects may have the same size but different formats. This is illustrated by the code below:

를 처음 읽은 것은 아닙니다
 
int *p = (int *) malloc(...); ... free(p);
를 기대
 유형.

제 질문은 free 를 자유롭게하는 방법입니다. ?

char*

  • 답변 # 1

    참고: malloc 의 반환 값을 캐스트해서는 안됩니다.  C.

    에서

    이 질문은 잠재적으로 유효하지 않은 리소스를 읽는 위험을 보여줍니다. 읽은 리소스가 정확한지 확인하는 것이매우 중요합니다! 문제의 OP 리소스는시대에 잘못되지 않았지만,오래된 것입니다이며, 결과적으로유효하지 않습니다. K&R 2E는 아이러니하게도1 년이 지난이지만 표준을 따르기 때문에 여전히날짜가 매우 많습니다.

    우리가 더 유명한 자원 ( free )을 참고하면  수동), 우리는 그 free 를 볼 수 있습니다  실제로 포인터는 void * 이어야합니다.  유형 :

    와이즈 비즈 와이즈 비즈

    ... 그리고 그만한 가치가있는 것은

    입니다.
     그 
    void free(void *ptr);
    를 보여주는 수동
     
    malloc
    를 반환
    :

    와이즈 비즈 와이즈 비즈
    <시간>

    두 경우 모두 C11/6.3.2.3p1 (C11 표준)에 설명 된대로 :

    와이즈 비즈
    malloc
    
    

    참고(처음 놓친 경우) : void * 의 반환 값을 전송하지 않아야합니다.  결국,

    에 전달할 때 캐스트 할 필요가 없습니다.
    맞습니까?

    void *malloc(size_t size);

  • 이전 web services - c # soap - 응답 메시지의 역 직렬화 오류 (magento api)
  • 다음 java - DecimalFormat 및 Mathpow