2017-03-06 9 views
1

를 구조체에 캐스팅되지 myValues ​​*에 할당됩니다. malloc을 캐스팅하지 말아야한다는 것을 알고 있습니다. 어떻게해야합니까? 뭐가 문제 야?malloc에 ​​나는 다음과 같은 간단한 코드가

정확한 오류 :

a value of type "void *" cannot be assigned to an entity of time "myValues *"

#include <stdio.h> 
#include <stdlib.h> 

typedef struct values 
{ 
int a; 
char c; 
void *pv; 
values *next; 
} myValues; 

int main(){ 
    myValues f; 
    myValues *n = malloc(sizeof(myValues)); 
} 
+1

정확한 오류 메시지를 표시하십시오. –

+1

C++를 C로 사용했습니다. – BLUEPIXY

+1

타입 캐스트가 무엇인지 알고 있습니까? – ysap

답변

5

이 프로그램은 C++ 프로그램으로 컴파일하는 것이 분명하다. 그렇지 않으면 컴파일러는 구조 정의에 대해 values이라는 이름이 선언되지 않았다는 오류를 발생시킵니다.

typedef struct values 
{ 
int a; 
char c; 
void *pv; 
values *next; 
^^^^^^ 
} myValues; 

그래서 당신은 유형 void *의 포인터가 암시 적으로 다른 유형의 포인터로 변환 할 수 없기 때문에

myValues *n = (myValues *)malloc(sizeof(myValues)); 

를 작성해야합니다.

(또는 당신은. 완전히 운영자 new의 사용에 대한 기능 malloc의 전화를 대체 예를 들어, C++ 프로그램으로 프로그램을 다시 작성할 필요) 또는 당신은 C 프로그램과 프로그램을 컴파일해야한다. 이 경우 작성해야합니다

typedef struct values 
{ 
int a; 
char c; 
void *pv; 
struct values *next; 
^^^^^^^^^^^^^ 
} myValues; 
+0

C++의 경우'myValues ​​* n = new myValues ​​()'를 추천 해 두는 것이 좋습니다. – zwol

+0

@zwol이 문제에 대해 생각했지만 C++ 컴파일러를 사용하는 경우에도 C 프로그램으로 프로그램을 컴파일 할 수 있다고 판단했습니다. –

+0

그래서 기본적으로 (C 컴파일러를 사용하는) 문제는 컴파일러가'values'를 모른다는 것입니까? 왜 그것이 malloc과 관련이 있습니까? malloc 또한 구조체 내부의 객체와 관련되기 때문에? –