关于全局变量:三个文件,head.h main.c program.c;
1. 如在head.h里定义int aaa;在main.c和program.c中添加#include
;则在两个文件中都可以用全局变量aaa,
2. 不在head.h中定义,main.c中定义int aaa;则在program.c中要加extern aaa;才能用全局变量。
以上两种情况,aaa都可以在子函数里改变,在main函数中也随之一起改变。
3. 在main函数里定义的变量bbb,再在子函数中重定义一边,不影响main函数中的变量。
关于头文件:三个文件,head.h main.c program.c放在同一目录下;
编译时,gcc -o out main.c program.c -I /.../(head.h存放目录)
4. 编译时出现“警告:字符常量大小超出其类型”
case 'ELOG_DEBUG':strcat(logstr," ELOG_DEBUG");
break;
case 'ELOG_NORMAL':strcat(logstr," ELOG_NORMAL");
break;
case 'ELOG_NOTICE':strcat(logstr," ELOG_NOTICE");
break;
case 'ELOG_ERROR':strcat(logstr," ELOG_ERROR");
break;
case 'ELOG_CRITICAL':strcat(logstr," ELOG_CRITICAL");
break;
在编译时,警告这些行“字符常量大小超出其类型”是由于'ELOG_DEBUG'字符常量太长!
5. libxml2的内存泄漏!
Linux下:
int readstrxml(char *psfilename,char *node)
int n = 0;
xmlDocPtr pdoc = NULL;
xmlNodePtr proot = NULL, curNode = NULL,sonNode = NULL;
xmlChar *szKey;
pdoc = xmlParseMemory(psfilename, strlen(psfilename));
……
xmlFreeDoc(pdoc);
// xmlCleanupParser();
// xmlMemoryDump();*/
return 0;
}
int readfilexml(void)
{
int n = 0;
char *psfilename="/etc/watch-dog.xml"; //configure file path
xmlDocPtr pdoc = NULL;
xmlNodePtr proot = NULL, curNode = NULL;
xmlChar *szKey;
pdoc = xmlReadFile (psfilename, "UTF-8", XML_PARSE_RECOVER);
……
xmlFreeDoc(pdoc);
xmlCleanupParser();
xmlMemoryDump();
}
int main(int argc,char *argv[])
{
ret = readfilexml();
if(ret < 0)
{
printf("readfilexml error\n");
return -1;
}
ret = pthread_create(&tid, NULL, udpser, NULL);
if( ret != 0)
{
perror("pthread_create:");
return -1;
}
……
}
void *udpser(void *arg)
{
ret = readstrxml(buf,node);
if(ret < 0)
{
printf("app responsion error!\n");
continue;
}
……
}
xmlCleanupParser(); xmlMemoryDump();这两个函数只能在udpser线程中调用,否则会出现内存泄漏!
阅读(1643) | 评论(0) | 转发(0) |