program story

malloc을 사용할 때`void * '에서`char *'로의 잘못된 변환?

inputbox 2021. 1. 10. 17:13
반응형

malloc을 사용할 때`void * '에서`char *'로의 잘못된 변환?


5 행에 오류가있는 아래 코드에 문제가 있습니다.

오류 :에서 void*로의 잘못된 변환char*

코드 블록과 함께 g ++를 사용하고 있으며이 파일을 cpp 파일로 컴파일하려고했습니다. 그게 그렇게 중요한 건가?

#include <openssl/crypto.h>
int main()
{
    char *foo = malloc(1);
    if (!foo) {
        printf("malloc()");
        exit(1);
    }
    OPENSSL_cleanse(foo, 1);
    printf("cleaned one byte\n");
    OPENSSL_cleanse(foo, 0);
    printf("cleaned zero bytes\n");
}

C ++에서는 다음을 반환해야합니다. malloc()

char *foo = (char*)malloc(1);

C ++은 C보다 더 많은 종류의 안전하도록 설계되어 있으므로 당신이하지 (자동)로 변환 할 수 있습니다 에서 void* 또 다른 포인터 타입. 파일이이므로 .cpp컴파일러는 C ++ 코드를 예상하고 앞서 언급했듯이 malloc에 ​​대한 호출 char*void*.

파일을 a .c변경하면 C 코드가 필요합니다. C에서는와 void*다른 포인터 유형 간에 캐스트를 지정할 필요가 없습니다 . 파일을로 변경하면 .c성공적으로 컴파일됩니다.


나는 이것이 malloc과의 라인이라고 가정합니다. 그런 다음 결과를 캐스팅하십시오.char *foo = (char*)...


그래서, 당신의 의도는 무엇입니까? C 프로그램이나 C ++ 프로그램을 작성하려고합니까?

C 프로그램이 필요한 경우 C ++로 컴파일하지 마십시오. 즉, 파일 확장자를 ".cpp"로 지정하거나 컴파일러에게 파일을 C로 처리하도록 명시 적으로 요청하지 마십시오. C 언어에서는 결과를 캐스팅해서는 안됩니다. / malloc. 질문에 [C] 태그를 지정했기 때문에 이것이 필요한 것이라고 가정합니다.

를 사용하는 C ++ 프로그램이 필요한 경우 malloc의 반환 값을 malloc적절한 유형 으로 명시 적으로 캐스팅 할 수밖에 없습니다 .

참조 URL : https://stackoverflow.com/questions/5099669/invalid-conversion-from-void-to-char-when-using-malloc

반응형