我正在從一個指針轉換,然後讓我運行這個警告(賦值使得整型指針沒有轉換)。 下面的代碼:警告:賦值會使指針從整型轉換爲無轉換
#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);
}
上主要我打電話:
TipoApontador Raiz;
則:
Raiz=NovaSubArvore(ordem); //Warning happens here
如果我這樣做:
if (Raiz!=NULL)
free(Raiz);
它運行invallid免費(奇怪,因爲如果Raiz是NULL免費不應該跑。 任何人都可以幫我解決這個問題嗎?我認爲這個警告是讓我免於「釋放」的問題。
編輯:關於華林解決好問題。但如果我免費2次運行一個無效的免費(我有一個功能,做一個免費的東西,其他時間不是。如果我做免費的「if(Raiz!= NULL)」應該阻止其他免費。?乳寧,但它不是
是你的'主'在同一個文件中,還是在不同的?如果它在同一個文件中,在'NovaSubArvore'之前或之後是否定義了'main'? – dasblinkenlight
沒有。我有一個頭結構和函數作用域和一個「.c」和函數聲明。首先我在「main.c」(main函數之前)包含頭文件。在標題上我什麼都沒有,並在「.c」中包含標題。 –
檢查類型和尺寸!這也是將A-> p = malloc((2 * ordem + 1)* sizeof(TipoPagina));'into'A-> p = malloc((2 * ordem + 1)* sizeof * A- > p(並且請不要在typedefs後面隱藏指針,它只會讓人困惑) – wildplasser