我正在从一个指针转换,然后让我运行这个警告(赋值使得整型指针没有转换)。 下面的代码:警告:赋值会使指针从整型转换为无转换
#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