发布时间:2013-01-09 15:42:35
free野指针会出现segment error! 野指针解释:(来自百度百科) 野指针的成因主要有三种: 一、指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是随机的,它会乱指一气。所以,指针变量在创建的同时应当被初始化,要么将指针设置为NULL,要么让它指向合法的内存。 二、指针p被free或者delete之后,没有置为NULL,让人误以为p是个合法的指针。 别看free和delete的名字(尤其是delete),它们只是把指针所指的内存给释放掉,但并没有把指针本身干掉。通常会用语句if (p != NU......【阅读全文】
发布时间:2013-01-09 12:13:19
昨晚上随便尝试写了下一个简单的reverse函数,就是颠倒字符的顺序,结果出现问题.研究了半天,大致是关于char* 和char[]初始化的.char* str1 = "abcd";char str2[] = "abcd";void reverse(char * input, int len){ ...}在调用reverse函数时. 从形式上 reverse(str1,5) 和reverse(str2, 5)都没有错误,传入的参数都是char数组的头指针,但是实际操作时,不能采取str1的初始化形式.char* str1 ="abcd"含义是先新建一个字符串,内容是abcd 然后str1是一个......【阅读全文】
发布时间:2013-01-09 12:12:56
在写股票软件过程中, 我希望把读取数据和显示数据的过程分离,他们的数据交换通过一个共享的链表来解决。通过shmget,可以获得一块共享的内存,但通常的情况下,一般申请的都是连续的空间,也就是说,我需要把数据存成一个数组,放在共享中。这个不是我的初衷。最初,我希望能只共享一个头指针,以为这样就可以直接共享链表了。但是结果是不可行的。经过一番实验和google,最终找到了解决办法。关键点:1.通常每个节点node,其中的next域存储的是*node, 即指向下个节点的指针。在这里,我们不能使用*node,否则读取程序是没法正确读取的。具体原因不清楚,但是经过实践证明,不可行。所以我们使用一个节点内......【阅读全文】
发布时间:2013-01-09 12:11:03
自己实现一个memcpy的函数。 需要考虑的地方在src和dest重叠的情况。 gcc编译有warning,运行通过。 点击(此处)折叠或打开 #include <stdio.h> #include <stdlib.h> void* mymemcpy(const void* src, void* dest, int size){ if(src == NULL || dest==NULL) return NULL; &nb......【阅读全文】
发布时间:2013-01-09 12:10:00
排序数组,使奇数在左边,偶数在右边,同时需保持元素相对顺序稳定。 正确解法使用冒泡即可。 代码中额外提供了基于快排的方法。(麻烦且没有必要,仅作思考和练手使用) 排序的本质是依据不同的权重计算方法,按权重进行排序。这里通过对数字奇偶性和它的的下标,计算了每个数字的权重,然后根据权重进行升序排列。 权重计算规则:奇数的权重小于偶数的权重,下标小的权重小于下标大的。 这种思想可用于各种排序的变体。 点击(此处)折叠或打开 #include <stdio.h> #include <stdlib.h> #define SWAP(a,b) (......【阅读全文】