原因
C++中的delete函数或者C的free函数越界,释放了过多空间
例子
RecType* R1 = (RecType*)malloc((sizeof(RecType)*(high - low))); //Rectype来自typedef
free(R1);
动态分配空间,空间开少了,忘了high- low+1,在释放时就有了越界错误
解释
相信你看到这里依然一头雾水,为啥释放还能越界?
其实,总结一句话,是动态分配的数组,写的时候发生了越界。
但是写越界并不会带来提示(和一般直接声明的数组不一样)!!
但当你释放空间时,会把你写过的地方都释放,这时候就有越界了
实验如下
这里high和low都是程序参数,为了做实验,传进来high=1,low=0,所以我的malloc根本没有分配出空间来
RecType* R1 = (RecType*)malloc((sizeof(RecType)*(high - low-1))); //Rectype来自typedef
接下来的东西类似于二路归并,你不用看懂,但要知道,我写了R1,是的,我写进去了,没报错
int i = low, j = mid + 1, k = 0;
while (i <= mid&&j <= high) {
if (R[i] <= R[j]) {
R1[k] = R[i];
i++;
}
if (R[i]>R[j]) {
R1[k] = R[j];
j++;
}
k++;
}
但是,free()函数到的时候就报错了!
总结
C语言(C++)的内存管理机制,导致你特别容易越界。
每次在用数组的时候,一定要问自己,有没有多释放?