c语言数组越界导致内存溢出,C++:堆栈溢出一般是由什么原因导致的 ;解释:内存溢出、内存泄露、内存越界、缓冲区溢出…

  • Post author:
  • Post category:其他


=================================================================

内存越界:

何谓内存访问越界,简单的说,你向系统申请了一块内存,在使用这块内存的时候,超出了你申请的范围。

内存越界使用,这样的错误引起的问题存在极大的不确定性,有时大,有时小,有时可能不会对程序的运行产生影响,正是这种不易重现的错误,才是最致命的,一旦出错破坏性极大。

什么原因会造成内存越界使用呢?有以下几种情况,可供参考:

例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.破坏了堆中的内存分配信息数据,特别是动态分配的内存块的内存信息数据&