"free" 的类型冲突

Conflicting types for "free"

我遇到了错误

Conflicting types for 'free'

关于调用下面的 free() 函数。

int main ( )
{
    char fx [] = "x^2+5*x-1";
    node * fxNode = buildTree(fx, sizeof(fx)/sizeof(char));
    printf(deriveFromTree(fxNode)); // Should print "2*x+5"
    free(fxNode);
    return 0;
}

不明白为什么。不确定这是否重要,但上面的是

#include <stdio.h>

char opstack [5] = {'+','-','*','^', '[=12=]'};

unsigned short int lowerOpPrecedence ( char, char, char * );

int stringToUnsignedInt ( char *, unsigned int * );
int stringToDouble ( char * , double * );
unsigned short int stringCompare ( char * , char * );
void stringCopy ( char * , char * );

typedef struct treeNode
{
    char * fx;
    char * op;
    struct treeNode * gx;
    struct treeNode * hx;
} node;


unsigned short int getNodeState ( node * );
node * buildTree ( char *, int );
char * basicDerivative ( char * );
char * derivateFromTree ( node * );

下面是一堆函数实现。

您需要添加 #include <stdlib.h>free() 提供原型。

此外,main() 的推荐签名是 int main (void)

如果您的链接器命令文件包含堆的特定定义,包括起始地址处的标签和长度标签,

然后你可以编写自己的 malloc、free、realloc、calloc 等版本。

顺便说一句:代码正在调用 'free()' 内存分配是如何使 'free()' 返回堆的?

您可以在某些操作系统内存 address space primitives (modifying the virtual memory of your process), like (on Linux) mmap(2)munmap 之上实现 mallocfree。详细信息特定于操作系统。

顺便说一句,如果你的目标是编写一个只使用 <stdio.h> 的程序,它的大多数实现在内部使用 malloc,因为每个 FILE 中的缓冲区通常是一些动态分配的字节区(具体来说,它通常通过 malloc 分配)。换句话说,fopen 的实现很可能使用 malloc;另见 this。因此,如果您接受包含 <stdio.h>,您应该接受包含 <stdlib.h>...

注意几个 standard C libraries (a.k.a. libc) are free software; you could study -and improve- the source code of GNU glibc or of musl-libc.

另请参阅 相关问题。