在Linux平台下面做C++开发的时候,需要特别的注意内存越界的问题,常见的内存越界现象主要有以下两种:1.在同一个函数内,分配变量内存的长度和填充变量的内存长度不一致。2. 在同一个模块内,不同的函数之间,内存分配和内存填充不一致。 任何形式的内存越界都可以导致系统挂死,通常我们可以借助系统产生的core文件帮助我们定位bug.
对于第一种情况,core文件会提示出非常准确的错误信息,但是对于第二种情况,core文件就不一定会给出准确的提示。例如,在函数A中,我分配了一条查询记录的空间,然后初始化了这个地址空间,在函数A中调用函数B,函数B中绑定了50条的查询记录,然后返回50条查询结果给A,这个时候系统一定会挂掉,而core文件绝不会提示你内存越界,它会提示你,归还数据库链接失败。
这是不是很令人郁闷,”归还“数据库链接也会失败?
对第一种情形,经常是由于忽略所分配变量的类型长度而导致的。
例如:
wchar * pBuffer = NULL;
vos_new(pBuffer, (wchar)pBufferLength);
我们该如何初始化pBuffer呢?
菜鸟们往往会写为 meset(pBuffer,0,pBufferLength);
后果是,执行该段程序的时候系统会挂死。
正确的应该写为meset(pBuffer,0,pBufferLength*sizeof(wchar ));