=================================================================
内存越界:
何谓内存访问越界,简单的说,你向系统申请了一块内存,在使用这块内存的时候,超出了你申请的范围。
内存越界使用,这样的错误引起的问题存在极大的不确定性,有时大,有时小,有时可能不会对程序的运行产生影响,正是这种不易重现的错误,才是最致命的,一旦出错破坏性极大。
什么原因会造成内存越界使用呢?有以下几种情况,可供参考:
例1:
char buf[32] = {0};
for(int i=0; i< 32 or n > 32
{
buf[i] = ‘x’;
}
…. 例2:
char buf[32] = {0};
string str = “this is a test sting !!!!”;
sprintf(buf, “this is a test buf!string:%s”, str.c_str()); //out of
buffer space
…. 例3:
string str = “this is a test string!!!!”;
char buf[16] = {0};
strcpy(buf, str.c_str()); //out of buffer space
类似的还存在隐患的函数还有:strcat,vsprintf等
同样,memcpy, memset, memmove等一些内存操作函数在使用时也一定要注意。
当这样的代码一旦运行,错误就在所难免,会带来的后果也是不确定的,通常可能会造成如下后果:
1.破坏了堆中的内存分配信息数据,特别是动态分配的内存块的内存信息数据&