2014-11-29 2 views
-1
내가 도움이 필요

내가경고 : 할당

경고 할당이 문제는 C에서 포인터를하게 해결하는 방법을 알고하지 마십시오 경우없이 정수의 포인터를 만든다 : 할당이 경우없이 정수의 포인터를 만드는 [사용 가능 기본]
openDir = getDirSuperBlock();
(화살표 등호에있다)에 의해

char* = openDir; 
openDir = malloc(128); 
openDir = getDirSuperBlock(); 

getDirSuperBlock 기능이

이다 01,235,706,
+0

왜 이것을 C++에서 컴파일하지 않을 때 이것을'C++'로 태그를 붙였습니까?'openDir = malloc (128);'? – PaulMcKenzie

+0

답변은'Answer' 섹션에 있습니다. 의견은 의견 섹션에 있습니다. 이 코드는 C++이 아니므로 이것이 내가 묻는 이유입니다. – PaulMcKenzie

답변

2

정의하기 전에 getDirSuperBlock()을 호출하는 것처럼 보이며 프로토 타입이 없습니다. C 컴파일러는이를 "암시 적으로"정의합니다. 즉, 기본적으로 반환 할 형식과 인수가 필요한 형식/번호를 추측합니다. 이 경우 항상 반환 유형이 int라고 추측합니다. 따라서 함수를 char* getDirSuperBlock()으로 정의하십시오.하지만 그 부분에 도달하기 전에 컴파일러는 다음과 같이 생각합니다 : int getDirSuperBlock(). 따라서 호출 위의 선언을 이동하거나 다음과 같이 호출하기 전에 프로토 타입을 추가하여이를 수정할 수 있습니다. char * getDirSuperBlock(); 또는 openDir = (char*)getDirSuperBlock();으로 명시 적으로이 intchar *으로 캐스팅 할 수 있지만 그다지 좋지는 않습니다. 이는 int와 char *가 모든 경우에 해당하지 않는 동일한 크기라는 것을 의미하기 때문입니다.