C++瓦尔格林德错误
C++ valgrind error
我有一个简单的程序:
class stack{
public:
void push(int a);
void pop();
int isempty();
void init();
void clear();
int* stos;
int size;
private :
int top;
};
void stack::init(){
this->top=0;
this->size=10;
this->stos= reinterpret_cast<int*>(malloc(sizeof(int)*size));
}
void stack::push(int a){
this->top++;
this->stos[top-1]=a;
if((this->top)>(this->size))
{
this->size=2*(this->size);
this->stos=reinterpret_cast<int*>(realloc(this->stos,sizeof(int)*(this->size)));
}
}
void stack::pop()
{
this->top--;
this->stos[this->top]=0;
}
void stack::clear(){
free(this->stos);
this->top=0;
}
int stack::isempty(){
if((this->top)!=0)
return -1;
else return 1;
}
int main(int argc, char** argv) {
stack s1;
s1.init();
s1.clear();
printf("%d",s1.stos[12]);
return 0;
}
我在 cpp 中乞求,瓦尔格林德返回这样的错误:
==4710== Invalid read of size 4
==4710== at 0x80486D7: main (main.cpp:69)
==4710== Address 0x4325058 is 8 bytes after a block of size 40 free'd
==4710== at 0x402B06C: free (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==4710== by 0x8048686: stack::clear() (main.cpp:51)
==4710== by 0x80486CF: main (main.cpp:68)
==4710==
如果主错误中没有clear()函数将是相同的,但会说40个分配:)我会很高兴得到任何帮助,谢谢。
执行此操作
时,您正在访问尚未分配的内存:
printf("%d",s1.stos[12]);
在第一种情况下,您调用 s1.clear()
,这将释放(取消分配)s1.stos 的内存。
在第二种情况下(如果你去掉了clear()
),你正在访问一个数组的第 12 个元素,你只分配了 10 个元素。
相关文章:
- 删除堆后对瓦尔格林德错误感到困惑
- 瓦尔格林德报告在 =带有嵌套shared_ptrs的运算符上的读取错误
- 瓦尔格林德错误 - 地址0x0不是堆叠的 malloc'd 或自由的
- 瓦尔格林德错误来自 boost::asio
- 修复了瓦尔格林德错误内存泄漏的错误
- 3D 阵列中的瓦尔格林德错误C++
- 访问字符串::c_str()的结果时出现瓦尔格林德内存访问错误
- 段错误,但不是在瓦尔格林德或GDB中
- 我应该如何修复瓦尔格林德的未初始化值错误?
- 二叉搜索树瓦尔格林德错误"Invalid read of size 8"
- C++赋值构造函数瓦尔格林德错误
- 为什么我会遇到分段错误?瓦尔格林德
- 瓦尔格林德无效读取大小 4 错误
- C++内存泄漏检查中的瓦尔格林德错误
- 有人可以用打开的 mpi 解释这个瓦尔格林德错误吗?
- 瓦尔格林德错误"Invalid read of size 4"
- 为什么瓦尔格林德会给出"Invalid read of size 1"错误?
- C++瓦尔格林德错误
- 瓦尔格林德 - 错误
- 瓦尔格林德错误,未初始化的值