jxdz232601 jxdz232601
关注数: 5 粉丝数: 62 发帖数: 4,002 关注贴吧数: 15
又弄完一个小程序!!!!!!C语言水平又上升了!!!!! 这次的小程序的需求是修改Ping命令,要求能同时ping多个地址,并且每次发多个ping包。并且对返回的响应针对每个IP单独统计。统计要求每N秒统计一次,并将统计的信息通过socket传到某服务器并入库。 要求全部用c编写,不用shell, 每秒发的ping包数和每N秒统计的时间间隔参数可调。 我用freeBSD的ping源代码改的。主要改动: (1)getopt()函数中增加 -j和-k ,分别确定每秒发的ping包数和每N秒统计的时间间隔。 (2)修改ping的参数,让ping不接受一个IP地址,而接受一个存放ip地址组的文件名,例如: ./ping -j 5 -k 60 ip.txt (3)增加链表,存放ip.txt里面的IP以及每个ip的ping的结果。 (4)增加两层while循环使得能同时ping多个地址,并且每次发多个ping包,为了不影响效率,发包函数用线程处理的。 (5)增加每N秒的统计,将结果存到链表中,单独在链表中加一个标记默认0,为1表明不是每个回应的统计,而是N秒所有回应的统计。 (6)对链表中标记为1的节点准备上传。 今年才开始做研发相关工作第一周,之前都是写写小脚本做维护及支持的,感受颇深啊,感觉要是真做进去了,边做边学,这样成长的才快。 后面就是用socket上传数据了,socket我也是只知道作用,没实践过,又得先实验了。 边做边学啊,推荐有目的的学习C语言,比如说要做个什么东西,这样就能将学的东西联系到一起。
cpp书上第533页的程序清单17.12二叉树程序有问题。 typedef struct item{ char petname[20]; char petkind[20]; }Item; /*定义项目*/ #define MAXITEMS 10 typedef struct node{ Item item; struct node * left; struct node * right; }Node; /*定义节点*/ typedef struct tree{ Node * root; int size; }Tree; /*定义树*/ void InitializeTree(Tree * ptree){ ptree->root==NULL; ptree->size==0; } /*初始化*/ void Traverse(const Tree * ptree,void (* fun)(Item item)) { if(ptree!=NULL) InOrder(ptree->root,fun); } /*遍历树并进行函数fun的操作*/ static void InOrder(const Node * root,void (* fun)(Item item)) { if(root!=NULL) {InOrder(root->left,fun); (*fun)(root->item); InOrder(root->right,fun); } } /*遍历树*/ void showpets(const Tree * pt) { if(TreeIsEmpty(pt))puts("no pets"); elseTraverse(pt,printitem); } /*遍历树中引用到的函数,作用是打印整个树*/ void printitem(Item item) { printf("pet:%-19s kind:%-19s\n",item->petname,item->petkind); } /*打印Item项目*/ 以上是cpp书上第533页的程序清单17.12。我将程序编译完成后(没有报错)后运行,在InitializeTree(Tree * ptree)即初始化后,直接打印整个树,或是直接按'q'退出,都报错。用到的函数如上所列。 其中初始化后直接打印整个树,竟然能打印出东西来。如下: [root@localhost pro]# ./17.12 enter a to add;l to show;n to number;f to find;d to delete;q to quit: l pet:��B kind: =5 pet:8�ソ��/ kind:X. Segmentation fault [root@localhost pro]# 难道初始化就有问题?
请教运行报错后怎么看错误信息?求大神啊。 [root@localhost pro]# ./17.12 enter a to add;l to show;n to number;f to find;d to delete;q to quit q *** glibc detected *** ./17.12: free(): invalid pointer: 0x00429ff4 *** ======= Backtrace: ========= /lib/libc.so.6[0x351595] /lib/libc.so.6(cfree+0x59)[0x3519d9] ./17.12[0x80488f9] ./17.12[0x80488ee] ./17.12[0x8048845] ./17.12[0x8048cea] /lib/libc.so.6(__libc_start_main+0xdc)[0x2fde9c] ./17.12[0x8048511] ======= Memory map: ======== 00285000-00290000 r-xp 00000000 08:02 194613 /lib/libgcc_s-4.1.2-20080825.so.1 00290000-00291000 rwxp 0000a000 08:02 194613 /lib/libgcc_s-4.1.2-20080825.so.1 002ca000-002e4000 r-xp 00000000 08:02 194295 /lib/ld-2.5.so 002e4000-002e5000 r-xp 00019000 08:02 194295 /lib/ld-2.5.so 002e5000-002e6000 rwxp 0001a000 08:02 194295 /lib/ld-2.5.so 002e8000-00427000 r-xp 00000000 08:02 194602 /lib/libc-2.5.so 00427000-00428000 --xp 0013f000 08:02 194602 /lib/libc-2.5.so 00428000-0042a000 r-xp 0013f000 08:02 194602 /lib/libc-2.5.so 0042a000-0042b000 rwxp 00141000 08:02 194602 /lib/libc-2.5.so 0042b000-0042e000 rwxp 0042b000 00:00 0 0068b000-0068c000 r-xp 0068b000 00:00 0 [vdso] 08048000-0804a000 r-xp 00000000 08:02 959387 /c/pro/17.12 0804a000-0804b000 rw-p 00001000 08:02 959387 /c/pro/17.12 09b37000-09b58000 rw-p 09b37000 00:00 0 [heap] b7f20000-b7f22000 rw-p b7f20000 00:00 0 b7f2a000-b7f2c000 rw-p b7f2a000 00:00 0 bff31000-bff46000 rw-p bffea000 00:00 0 [stack] Aborted 我只看得懂./17.12: free(): invalid pointer: 0x00429ff4 说是某一次调用free()的时候出错了,那下面那一片内存啥的是啥意思啊。 求解啊。
首页 1 2 下一页