포인터에서 캐스트를 수행하면이 경고가 계속 실행됩니다 (할당은 캐스트없이 정수에서 포인터를 만듭니다). 내가 할 경우경고 : 캐스팅없이 정수에서 포인터를 할당합니다.
Raiz=NovaSubArvore(ordem); //Warning happens here
:
#include<stdio.h>
#include<stdbool.h>
typedef int TipoChave;
typedef struct TipoRegistro {
TipoChave Chave;
/*outros componentes*/
} TipoRegistro;
typedef struct TipoPagina* TipoApontador;
typedef struct TipoPagina {
int registros;
TipoRegistro *r;
TipoApontador *p;
} TipoPagina;
TipoApontador NovaSubArvore(int ordem){
TipoApontador A;
A=malloc(sizeof(TipoPagina));
int i;
A->registros=0;
A->r=malloc((2*ordem)*sizeof(TipoRegistro));
A->p=malloc((2*ordem+1)*sizeof(TipoPagina));
for (i=0;i<(2*ordem+1);i++){
A->p[i]=NULL;
if(i!=2*ordem){
A->r[i].Chave=0;
}
}
return (A);
}
주요 I의 통화 : 다음
TipoApontador Raiz;
여기에 코드입니다
if (Raiz!=NULL)
free(Raiz);
그것이 invallid 무료 실행 (이상한데 왜냐하면 Raiz가 NULL이기 때문입니다. 자유가 없어야했습니다. 아무도 저 문제를 도와 줄 수 있습니까? 나는이 경고가 나를 "자유롭게"하지 못하게하는 문제라고 생각한다.
편집 : 문제 해결에 관한 OK 문제. 그러나 내가 2 번 무료로한다면 그것은 무효 무료 (나는 무료 somethings, 다른 시간 않는 기능이 있습니다. 내가 무료로 할 경우 "(Raiz! = NULL)"다른 무료 차단해야합니다. ...?들이받은하지만 그렇지 않은 나에게 확인을 보이는
'메인'파일이 같은 파일에 있는지, 다른 파일에 있습니까? 동일한 파일에 있다면'main'이'NovaSubArvore' 앞이나 뒤에 정의되어 있습니까? – dasblinkenlight
Nope. struct 및 함수 범위와 ".c"및 함수 선언에 대한 헤더가 있습니다. 먼저 "main.c"(주 기능 이전)에 헤더를 포함합니다.헤더에 나는 아무것도 포함하지 않고 ".c"에 헤더를 포함합니다. –
종류와 크기를 확인하십시오! 또한 A-> p = malloc ((2 * ordem + 1) * sizeof (A * -p))을 A-> p = malloc ((2 * ordem + 1) * sizeof (TipoPagina) > p);'(그리고 typedef 뒤에 포인터를 숨기지 마십시오. 사람들을 혼란스럽게합니다.) – wildplasser