C 没有

C 没有,c,pointers,C,Pointers,我想知道如何在不使用任何头文件的情况下释放指针 我正在使用一个无法使用的VX RTOS平台,因此我收到一条错误消息,说隐式函数声明“free”[-Werror=隐式函数声明] 我的代码中有几个包含指针的函数。我感冒的时候给他们打了好几次电话。所以我认为我应该释放指针。我想知道如何释放他们。我把代码中的一个函数放在这里 int complex1(double a1,double b1,double c1,double d1,int op,double *e1, double *f1){ doubl

我想知道如何在不使用任何头文件的情况下释放指针

我正在使用一个无法使用的VX RTOS平台,因此我收到一条错误消息,说隐式函数声明“free”[-Werror=隐式函数声明]

我的代码中有几个包含指针的函数。我感冒的时候给他们打了好几次电话。所以我认为我应该释放指针。我想知道如何释放他们。我把代码中的一个函数放在这里

int complex1(double a1,double b1,double c1,double d1,int op,double *e1, double *f1){
double c2d2;
    //a=real(complex no1);b=imag(complex no1);c=real(complex no2);d=imag(complex no2);c2d2=sqrt(c1*c1+d1*d1)
    /*op=type of operation
        op=1: addition
        op=2: substraction
        op=3: multiplication
        op=4: division  
        op=5: absolute value 
    */
    //Resultant compex number is in the form of e1+1j*f1
    //Comlex number addition
    if (op==1){
        *e1=a1+c1;
        *f1=b1+d1;
    } 
    //Comlex number substraction
    if (op==2){
        *e1=a1-c1;
        *f1=b1-d1;
    }   
    //Comlex number multiplication
    if (op==3){
        *e1=a1*c1-b1*d1;
        *f1=b1*c1+a1*d1;
    }   
    //Comlex number division
    if (op==4){
        c2d2=c1*c1+d1*d1;
        *e1=0;*f1=0;
        if (c2d2 != 0){
            *e1=(a1*c1+b1*d1)/(c2d2);
            *f1=(b1*c1-a1*d1)/(c2d2); 
        }
    }       
    //free(*e1);free(*f1);

    return 0;
}

如果不能包含头文件,但链接到C标准库实现,那么只需声明原型,警告就会消失

在文件顶部声明函数free3

void free(void *ptr); 

如果由于某些可疑的原因无法包含,则可以在使用函数之前将其声明为free:

void free(void *); 
如果系统的C库中没有名为free的符号,则会出现链接时间错误。如果是这样,人们只能希望它是标准自由函数的一致实现

我想知道如何在不使用任何头文件的情况下释放指针

而你也许可以逃脱

void free(void* ptr); 
我强烈建议不要走这条路,尤其是如果您使用VisualStudio。
使用include,除非你有很强的理由不这样做。

如果你不能使用free,你还必须自己实现malloc不?您是否在嵌入式目标上?闻起来像是X-Y问题。根据C标准,您只能使用malloc/realloc/calloc返回的指针进行免费调用。如果没有stdlib.h,指针从哪里获得?如果有*alloc函数,但没有free函数,在这种情况下,我强烈建议您考虑其他硬件平台,因为这将是您未来面临的许多问题中的第一个。您不能在C中释放指针。您可以释放malloc获得的对象。free的指针参数需要指向这样一个对象,并告诉free释放什么。但仍然没有解释它们是如何获得任何*alloc函数声明的:p标准库中的名称是托管环境中的保留名称。应用程序不得自行声明它们。@Olaf:否,请参阅7.1.4库函数的使用,^2:前提是库函数可以在不引用头中定义的任何类型的情况下声明,也允许声明函数并使用它,而不包括其关联的标头。@R..:我主要参考7.1.3:Bullet 4:以下任何子类中具有外部链接的所有标识符,包括未来库方向和errno,始终保留用作具有外部链接的标识符。事实上,空虚是自由的。。。具有外部链接。更不用说它毫无意义:如果没有malloc等,就没有免费的。否则,应该有其他机制来释放内存。@Olaf:这意味着您不能提供自己的定义或冲突声明,而不是不能对标准定义进行声明,这是上面明确允许的。如果实现具有不一致的free实现,则不能保证您会得到链接时间错误;只有在没有所谓的免费链接时,才会出现链接错误。C++具有类型安全链接;C没有。如果free的实现不一致,也不能保证会出现运行时错误。@JonathanLeffler:你完全正确,我将重新表述我的答案。如果你真的不能使用stdlib.h,你可以使用unistd.h中声明的sbrk或brk。但是这些只能在*nix IIRC上使用。@Olaf:您不能定义自己的声明,但只要您的声明符合标准的要求,并且声明不需要来自标题的typedef,您就可以自己声明它们。@c650:您知道Unix/POSIX系统不提供stdlib.h免费版本吗?