摘要: realloc invalid pointer错误char* temp=(char*) realloc(src,sizeof(char)*100);如上面这行代码,可能会出现标题中的错误。错误原因是因为src指向的不是NULL或堆中的地址。具体的就是realloc函数要求src为下面两种情况1.src==NULL2.src指针必须是malloc(), calloc(), 或realloc()分配的造成错误的代码造成错误的代码一般是如下形式是char* src="Hello world!";//错误代码或者char src[100];//错误代码上面这两种方式分配内存位于栈区 阅读全文
posted @ 2012-07-02 19:05 ladd 阅读(4189) 评论(0) 推荐(1) 编辑
摘要: strcat是将一个字符串链接到另外一个字符串上的函数,具体形式如下:char* strcat(char* dest,const char* src)函数的具体流程如下:1.先查找dest字符串的结尾(即'\0')2.然后从dest字符串的结尾位置(即'\0'所在的位置)开始,复制src中的字符(包括结尾'\0')。产生的结果是dest的结尾'\0'会被覆盖掉,最后产生一个新的结尾。3.将dest返回(一般用不到)注意事项1.dest必须被初始化,即包含一个'\0'结尾。用malloc分配字符串时,经常发生没有初始 阅读全文
posted @ 2012-07-01 18:28 ladd 阅读(4593) 评论(0) 推荐(1) 编辑
摘要: realloc函数用来为ptr重新分配大小为size的一块内存,看似很简单,在使用过程中却会发生各种错误。函数形式为:void * realloc ( void * ptr, size_t new_size );最近在网上查看了一些资料,在glibc中没有找到具体的实现(有人找到了可以发给我,ladd.cn@gmail.com),查到了一个开源项目自己写的realloc代码,http://code.google.com/p/mallocspethmeniel/source/browse/trunk/realloc.c?r=23,应该和stdlib里面的实现流程一样。下面是我画出的函数流程图这个 阅读全文
posted @ 2012-06-30 22:19 ladd 阅读(6366) 评论(1) 推荐(2) 编辑
摘要: linux下用socket通信,有TCP、UDP两种协议,网上的很多教程把两个混在了一起,或者只讲其中一种。现在我把自己这两天研究的成果汇总下来,写了一个完整的,适合初学者参考,也方便自己以后查阅。首先讲什么是socket,不喜欢理论的可以略过。Berkeley套接字应用程序接口(API)包括了一个用C语言写成的应用程序开发库,主要用于实现进程间通讯,在计算机网络通讯方面被广泛使用。(来自wikipedia socket)下面介绍一下常用的socket API(也来自wikipedia socket)这个列表是一个Berkeley套接字API库提供的函数或者方法的概要:socket()创建一个 阅读全文
posted @ 2012-06-25 11:10 ladd 阅读(9166) 评论(0) 推荐(3) 编辑
摘要: 最近用到了schema验证xml文件,搜了一下资料,整理在下面。国内的资料比较少,我主要参考了国外的两篇文章http://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapi/index.html和http://tutorials.jenkov.com/java-xml/dom-schema-validation.html。上代码:import java.io.File; import javax.xml.transform.stream.StreamSource;//StreamSource import javax.xml.*;/ 阅读全文
posted @ 2011-09-16 17:07 ladd 阅读(825) 评论(0) 推荐(0) 编辑
摘要: 在项目属性->构建环境->添加外部归档,选择jdom.jar即可,jdom在下载的build文件夹中 阅读全文
posted @ 2011-08-21 11:56 ladd 阅读(281) 评论(0) 推荐(0) 编辑
摘要: 今天刷poj上的2635题,费了很长的时间。老是有各种小毛病,最后试了一组大数据,测试通过。提交的时候却出现runtime error,检查数组,发现没有越界。后来搜索发现问题出在局部函数main中的数组过大,导致栈溢出。定义为全局变量ac。引用:问题:堆栈溢出的原因是因为在main里定义的局部变量 a[1000][1000]有将近 4MB的空间,由于局部变量是在栈中进行分配的, 所以4MB的空间对于栈来说是太大了原文地址 阅读全文
posted @ 2011-05-22 02:11 ladd 阅读(674) 评论(0) 推荐(0) 编辑
摘要: 今天做搜索的acm题,有一步需要用到计算100000以内的素数,并保存在一个数组内。直接算超时,讲义中用其他约束条件将范围变为了10000才打到了时间的要求。在网上搜C++素数计算,发现了一段经典代码。实验了一下,速度非凡,在我这1G内存的老式笔记本上求出1亿以内的素数并保存到制定数组中只用了8.531s。计算10万以内的只需1ms。代码贴在下面 int count=0; bool *temp=new bool[data]; for(int i=0;i!=data;++i) temp[i]=true;//用来判断是否是素数的数组 temp[2]=true;... 阅读全文
posted @ 2011-05-18 19:29 ladd 阅读(2674) 评论(0) 推荐(0) 编辑
摘要: 今天写了段程序,帮着同学处理一个dat文件中的数据。用fopen,fscanf读取文件中的数字总是没有结果。后来发现问题出现在"wt+"上,每次用这种mode打开都会把原来的文件清空。后来直接用"r",这个问题就解决了。哎,看来一年不编程序,忘的东西不少了。百度了一下各种mode: mode有下列几种形态字符串: r 打开只读文件,该文件必须存在。 r+ 打开可读写的文件,该文件必须存在。 rb+ 读写打开一个二进制文件,只允许读写数据。 rt+ 读写打开一个文本文件,允许读和写。 w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件 阅读全文
posted @ 2011-05-15 23:54 ladd 阅读(368) 评论(0) 推荐(0) 编辑
摘要: printf是C语言下经典的输出方式cout是C++中强力推荐的输出方式printf需要人为的设定输出格式,相比较而言cout操作更加简单,能够自动识别输出的类型。例如输出a和b的和是sum,用printf表示为:printf("%d和%d的和是%d/n",a,b,sum);而用cout可以表示为:cout<<a<<"和"<<b<<"的和是"<<sum<<endl;在效率方面printf有明显的优势,下面就二者的效率做具体的比较IDE:wxdev-C++ buil 阅读全文
posted @ 2011-05-13 12:48 ladd 阅读(736) 评论(0) 推荐(0) 编辑