对象可能在C++释放后被修改
Object was probably modified after being freed C++?
此函数将元素插入到动态数组中。当我注释掉删除 [] 数组时,我收到此错误,但如果我不这样做,一切正常。.那是我插入阵列很顺利。安迪知道为什么?
错误:释放对象的校验和不正确 - 对象可能在释放后被修改。在malloc_error_break中设置断点以进行调试
#include <iostream>
#include "dynamic_array.h"
using namespace std;
dynamic_array::dynamic_array() {
try {
array = new int[0];
size = 0;
allocated_size = 5;
} catch ( const std::bad_alloc& e ) {
throw exception(MEMORY_EXCEPTION);
}
}
dynamic_array &dynamic_array::operator=(const dynamic_array &a) {
return *this;
}
dynamic_array::~dynamic_array() {
delete [] array;
}
int dynamic_array::get_size(void) const {
return size;
}
int dynamic_array::get_allocated_size(void) const {
return allocated_size;
}
int& dynamic_array::operator[](unsigned int i) {
if (i >= get_size())
throw exception(SUBSCRIPT_RANGE_EXCEPTION);
else
return array[i];
}
const int& dynamic_array::operator[](unsigned int i) const {
if (i >= get_size())
throw exception(SUBSCRIPT_RANGE_EXCEPTION);
else
return array[i];
}
void dynamic_array::insert(int x, int i) {
try {if (i < 0 || i > get_size())
throw exception(SUBSCRIPT_RANGE_EXCEPTION);
if(size == 0){
array[i] = x;
size++;}
else if(allocated_size == size){
int *array2;
array2 = new int[allocated_size+5];
allocated_size += 5;
for(int j=0;j<=size-1;j++)
array2[j] = array[j];
//delete [] array;
array = array2;
shift_right(i,size-1,1);
array[i] = x;
size++;
}
else{
shift_right(i,size-1,1);
array[i] = x;
size++;
}
} catch ( const std::bad_alloc& e ) {
throw exception(MEMORY_EXCEPTION);
}
}
void dynamic_array::shift_right(int start, int end, int delta) {
if(0 <= start && start <= end & end <= size){
int temp [size];
int s = 0;
for(int i = start; i <= end; i++){
temp[s] = array[i];
s++;
}
int d = 0;
for(int j = start + delta ; j< sizeof(temp)+end; j++){
array[j] = temp[d];
d++;}
}
}
shift_right出现问题,我不得不重写.. 移位超出了为数组分配的大小,修复后该错误消失了。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 释放错误后堆使用
- G锁定铸造到基础上会释放模拟行为
- 在将变量声明为引用时,堆在释放后使用
- 独立读取-修改-写入顺序
- 在调用FreeLibrary后,释放动态链接到具有相同版本的CRT堆的DLL的内存
- 当系统的卷被修改时,如何修改WASAPI环回捕获卷
- 修改函数中的指针(将另一个指针作为参数传递)
- 为什么我可以通过引用修改常量返回
- 对于结构,表达式必须是可修改的ivalue
- QML:修改在不同QML文件(而非main.QML)中定义的子对象的属性
- 为什么不能修改对象中的值?另外,我如何改进此链表?
- 修改创建帐户程序
- 如何修复对象在释放后可能修改的malloc错误
- c++ 堆警告:释放后修改了空闲堆块
- 使用calloc分配内存时出错(释放堆块XXX后在YYY修改)
- 对象可能在C++释放后被修改
- 当调用函数时,修改指针如何释放内存
- 输出声明Heap在释放后被修改,但没有添加到Heap中
- Boost线程:释放后被修改的对象