现在的位置: 首页 > 综合 > 正文

C/C++编译或链接,错误汇总

2014年09月14日 ⁄ 综合 ⁄ 共 2137字 ⁄ 字号 评论关闭

低级错误汇总:

(1)环境:eclipse c语言;错误现象: 找不到库文件里的函数,编译时无错误,也没有提示找不到库。只是在链接时提示找不到该函数。

原因:库之间有依赖性,有先次序之分,调整以下库的次序就可以解决问题了。
(2)环境:eclipse c语言;错误现象:编译时报出implicit declaration of function

原因:头文件中包含的或是使用extern声明的函数和函数本身定义不一致。

(3)环境:eclipse c语言;错误现象:两个线程使用localtime,结果localtime的值总是相同。

原因:localtime不可重入
(4)unsigned int n_bytes = recv(socket_fd, recbuf,recvbuf_size,0);

原因:使用无符号整形去接收有符号返回值,结果有可能是:本来返回-1,却认为是4294967295,即0xFFFFFFFF。

(5)htons转换后结果不对

原因:htons是将16位整形转换为网络字节序,如果转换int数据,则高两个字节丢失,htonl才是转换32位的。

(6) error LNK2019: 无法解析的外部符号 "public: __thiscall Base::Base(void)" (??0Base@@QAE@XZ),该符号在函数 _wmain 中被引用

原因:类Base中的函数Base没有定义函数体。

(7)环境:eclipse c语言 No source available for "free() at 0x38e467b70c" 

原因:指针未作初始化,让该指针指向一个确定的位置,防止野指针。应该这样定义:char *p_start = NULL;

(8)环境:eclipse c语言 

描述:char *md5_str = (char*)malloc(33); md5_str[32] = '\0';strcat(md5_str,"ef7a");以连接的方式给md5_str赋值,结果却不确定!!!

原因:md5_str开辟的内存没有初始化,而strcat是从md5_str字符串尾部连接的。所以需要初始化----md5_str[0] = '\0';

(9) c:409: undefined reference to `pthread_create'
          413: undefined reference to `pthread_join'
原因:因为pthread并非Linux系统的默认库,而是posix线程库,在Linux中将其作为一个库来使用,因此加上 -lpthread(或-pthread)以显示的链接该库。对于eclipse添加pthread库连接。另外函数在执行错误时的错误信息将作为返回值返回,并不修改系统全局变量errno,当然也无法使用perror()打印错误信息。

(10)visual studio编译:fatal error C1010: unexpected end of file while looking for precompiled header directive。
  原因:寻找预编译头文件路径时遇到了不该遇到的文件尾。(一般是没有#include "stdafx.h")

(11)linux “段错误”(Segmentation Fault
原因:段错误是指访问的内存超出了系统给这个程序所设定的内存空间,
      例如访问了不存在的内存地址(例如:int *ptr = NULL;*ptr = 0;)、
      访问了系统保护的内存地址(int *ptr = (int *)0; *ptr = 100;)、
      访问了只读的内存地址( char *ptr = "test";strcpy(ptr, "TEST");)
      栈溢出(void main(){main();})等等情况。

(12)char *p = (char*)malloc(81);p[80] = '0';

原因:非法的C字符串结尾,是'\0'不是‘0’。字符‘\0’和数据0是等价的。而‘0’却表示字符零,在内存中为48。

(13)eclipse运行错误:workspace in use or cannot be creates,choose a different one
原因:出现这种情况一般是workspace的配置文件中出现了.lock文件(workspace/.metadata/.lock),锁定了workspace。

把.lock文件删除即可。如果该文件不能删除,可能是因为javaw.exe进程未结束,结束该进程及eclipse.exe进程即可删除。

(14)结构体指针作为参数传入时程序崩溃
原因:结构体指针未分配内存空间,所以在执行函数体进行instance->s = 10;程序崩溃,这一点和数组指针不同,下例子执行出错!

struct TEST
{
   int s;
   char *p;
};
void fun(struct TEST *instance)
{
	instance->s = 10;
	instance->p = (char*)malloc(4);
	memcpy(instance->p,"123",4);
}
int main()
{
    struct TEST  *AA;
    fun(AA);
}

寄语:你可能用一生去等待,结果只用两分钟将你的等待华为泡影,因为你在别人的眼里根本不重要。

确认后逐步整理吧!

抱歉!评论已关闭.