C++内存泄漏,编译通过 ,运行出错,请问怎么改代码

请问为什么每次输出值后,后面还会跟着一串随机的数字,如果插多几个值后运行会直接奔溃。

#include<iostream>
using namespace std;

class List{
public:
List(int size);
~List();
bool ListInsert(int i,int *e);
void ListTraverse();
private:
int *m_pList;
int m_isize;
int m_iLength;
};

List::List(int size){
m_isize=size;
m_pList=new int[m_isize];
m_iLength=0;
}

List::~List(){
delete[]m_pList;
m_pList=NULL;
}
bool List::ListInsert(int i,int *e){
if(i<0||i>m_isize) {
return false;
}else{
for(int k=m_iLength-1;k>=i;k--) {
m_pList[k+1]=m_pList[k];
}
m_pList[i]=*e;
m_iLength++;
return true;
}
}
void List::ListTraverse(){
for(int k=0;k<m_iLength;k++){ // 只需修改此处,因为下标从0开始,所以k只能小于顺序表的长度,而不是小于等于.
cout<<m_pList[k]<<endl;
}
}
int main(){
int e1=3;
List *list=new List(10);
list->ListInsert(0,&e1);
list->ListTraverse();

delete list;// 释放内存

system("pause");

return 0;
}

温馨提示:内容为网友见解,仅供参考
无其他回答

oj代码报runtimeerror了怎么改,编译运行都正确!?
1. 确认指针正确指向了分配的堆内存。检查指针声明和初始化部分,确保指针正确指向了`new`操作分配的内存地址。2. 在使用完动态分配的内存后,使用`delete`进行释放。确保在适当的位置添加了`delete`语句,以避免内存泄漏。3. 调试代码,使用`Ctrl+Z`退出程序。这可以确保在程序执行完毕后,正确释放了所...

为什么运行c++ runtime. exe会出现问题呢?
首先,问题可能源于代码本身。C++是一种相对复杂的编程语言,如果代码中存在逻辑错误、内存泄漏、指针错误或者使用未初始化的变量等问题,都有可能导致程序运行时崩溃或者产生不可预期的行为。例如,如果程序中存在一个野指针,即一个未被正确初始化或已被释放的指针,试图访问这个指针指向的内存地址就可能导...

内存泄漏是编写代码时最不想要遇到的情况之一,为什么?
四、变量不合理的定义域在变量使用过程之中,要对变量的定义域进行约束,如果是变量定义域在使用的过程之中本身的范围超过了所需要的范围,并且没有置空,则就会造成内存泄露的出现。

如何检测C++的内存泄漏,用哪些工具?
最简单的方法当然是借助于专业的检测工具,比较有名如BoundsCheck工具,功能非常强大,相信做C++开发的人都离不开它。此外就是不使用任何工具,而是自己来实现对内存泄露的监控,分如下两种情况:一. 在 MFC 中检测内存泄漏假如是用MFC的程序的话,很简单。默认的就有内存泄露检测的功能。我们用VS2005生成...

Visual Leak Detector 内存泄露检测,该怎么处理
编译运行后,在标准输出窗口得到:p=003a89c0 在Visual C++的Output窗口得到:WARNING: Visual Leak Detector detected memory leaks!--- Block 57 at 0x003A89C0: 4 bytes ---57号块0x003A89C0地址泄漏了4个字节 Call Stack: --下面是调用堆栈 d:\\test\\testvldconsole\\testvldconsole\\main...

C++编译运行时显示“以停止工作”是什么意思啊
这个可能是代码里存在严重错误,导致内存泄漏时发生的。请你重点检查所有的数组操作、指针操作和内存申请释放操作。这些地方是最容易发生这类情况的。

如何使用工具进行C\/C++的内存泄漏检测
上面的代码中,我们使用了malloc()来分配内存,但是使用了delete操作符来删除内存.注意: 使用g++来编译上面的代码,因为delete操作符是在C++中引进的,而要编译C++需要使用g++.让我们运行来看一下 :$ valgrind --tool=memcheck --leak-check=full .\/val==2972== Memcheck, a memory error detector==2972== ...

runtime error错误怎么解决?
举个例子,假设一个C++程序在运行时抛出了“Access Violation”错误。这通常意味着程序试图访问一个无效的内存地址。为了解决这个问题,开发者可以使用调试器来定位发生错误的代码行,并检查那部分代码是否试图访问一个未初始化或已被释放的指针。一旦找到问题所在,开发者就可以通过初始化指针、...

C\/C++ 静态代码检测工具cppcheck
默认启用的检查包括语法和代码规范,无法关闭。其他类型检查,如性能和可移植性,可通过`--enable`参数启用或禁用。获取所有检查器列表的方法是运行命令行应用。Cppcheck默认检查内存泄漏,但其静态分析特性限制了它对运行状态的检测能力。内存泄漏检测属于其强项,但无法替代动态分析工具、代码审查和测试。性能...

C++中,在一段正常的代码中,只要加入delete指针,程序就崩溃。怎么回事...
所以你的delete是没有必要的。但是你的int *X = new int;这里开辟了堆上的一块内存,而后面的X=&varOne却把指向刚才开辟的内存的指针指向了另一个地方,你没有用其他的指针保存那个地址。那你开辟的堆上的内存就没有办法操作了,也就没有办法再去释放了,这就导致了内存泄露,如果 你的程序要...

相似回答