"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
之上实现 malloc
和 free
。详细信息特定于操作系统。
顺便说一句,如果你的目标是编写一个只使用 <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.
另请参阅 相关问题。
我遇到了错误
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
之上实现 malloc
和 free
。详细信息特定于操作系统。
顺便说一句,如果你的目标是编写一个只使用 <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.
另请参阅