2 u012540439 u012540439 于 2013.11.21 22:12 提问

用new申请了一个结构体数组,delete时内存错误

strong text //////////////////////////////////////CLOCK算法部分//////////////////
void CLOCK()
{
arr *page_t;
int i,j,pointer,times=0,flag=-1,num=0;//pointer为查找位置
page_t=new arr[m];
//==============================开始计算=============
if(n<=m)
cout<<"No fault.\n";//如果n<=m不可能缺页
else
{//当n>m时,计算缺页次数
for(i=0,j=0;i<n;i++)
{
if(i==0) {page_t[j].e =page[i];page_t[j].yes =1;num++;}
else
{
flag=-1;//若发现缺页,则值应该不变,否则为正数
for(j=0;j<num;j++)//所需页面是否已在页框中
if(page_t[j].e ==page[i])
{
page_t[j].yes =1;//再次进入页框时又被标记为1
flag=j;break;
}
if(flag<0)//1缺页或者2页框还未满
{
if(num<m)//2页框未满时
{
page_t[num].e =page[i];
page_t[num].yes =1;
num++;
}
else
{//1如果缺页
for(pointer%=m; ; ++pointer%=m)//循环查找为0的页框
if(page_t[pointer].yes ==0)
{//找到置换它,缺页次数+1,置换后yes置1
page_t[pointer].e =page[i];
page_t[pointer].yes =1;
++pointer%=m;
times++;break;
}
else//未置换,标志位置0
page_t[pointer].yes =0;
}
}//if
}//else
}//for
cout<<"缺页率:times/m = "<<times<<"/"<<m<<"= "<<(float)times/m<<endl;
}//else
delete []page_t;
}/////////////////////////////CLOCK算法结束、、、、、、、、

int main()
{
Initial();
CLOCK();
delete []page;
}
其中page[n]是整型的页面号2 3 2 1 5 2 4 5 3 2 5 2(12个);页框为m=3个
//全局变量:
int m, n;//:m=物理块数,n=页面总项;
int * page;//:存放页面

void Initial()
{
cout<<"请输入物理块数:m = ";
cin>>m;
cout<<"\n请输入页面总项:n = ";
cin>>n;
page=new int[n];
cout<<"请输入各个页面号,以空格号间隔:\n";
for(int i=0;i cin>>page[i];
}

有点乱,哪儿出问题了呢?指点新手谢谢

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
动态内存管理---new&delete
交流!
new出的对象数组必须要用delete[]删除,而普通数组和结构数组delete和delete[]都一样
为何new出的对象数组必须要用delete[]删除,而普通数组delete和delete[]都一样-----_CrtMemBlockHeader                                                                   温馨提示: 该文所有测试没有特殊说明都是在Debug模式下!用的是VS2010编译器! ======
new和delete对结构体分配内存的问题
今天帮小师弟调代码,发现一个问题,
内存申请与释放
使用 char* p = new char[100]申请一段内存,然后使用delete p释放,有什么问题? 会有内存泄露 不会有内存泄露,但不建议用 编译就会报错,必须使用delete []p; 编译没问题,运行会直接崩溃 答案:B C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对
c++中什么时候用new[]申请,可以用delete释放
首先想到的是c语言中的 **malloc** 和 **free** ,这两个是库函数,而在c++中 new 和 delete是运算符(和 + - * /一样),在使用new的时可以看成使用默认使用构造函数+malloc,使用delete时可以堪称使用析构函数+free。简单说一下malloc 系统管理堆内存运用的是链表的方式:分配堆内存地址时依次由低向高遍历”堆链“,但遇到大小合适的堆块时,将这个
结构体指针数组 内存分配 释放
#include #include #include #include #include using namespace std;typedef class student{public:intnumber;char*name;}STU, *LPSTU;vectorvec;vector::iterator iter;mapmapstu;map::iterator itermap;void main(void){char* str1 = "YaoMing";char* str2 = "T_MAC";ch
指向指针的指针申请动态内存
在《高质量c编程指南》中,提到了 如果函数的参数是一个指针,那么别指望它能申请动态内存。 代码如下:#include<stdio.h> #include<stdlib.h> void GetMemory(char *p,int num);int main() { char* stu=NULL; GetMemory(stu,100); printf("%d\n",stu);
C++【堆内存的动态分配与释放(new/delete)】
C语言分配动态内存常用函数:malloc/calloc/realloc/free C++语言用new/delete:详见memory.cpp 1.通过new运算符分配单个变量 数据类型* 指针变量 = new 数据类型(初值); int* p2 = new int;int* p3 = new int (100); 2.通过new运算符分配数组 int* p4 = new int[5]
二级指针的申请跟删除(基于C++的new机制)
#include #include #include using namespace std; #define FORi(N) for(int i=0;i!=N;i++) #define FORj(N) for(int j=0;j!=N;j++) #define El <<endl int main(){ int ** iptr = new int*[3]; int* tempPtr
valgrind检查内存错误
调不尽的内存泄漏,用不完的Valgrind Valgrind 安装 1. 到www.valgrind.org下载最新版valgrind-3.2.3.tar.bz2 2. 解压安装包:tar –jxvf valgrind-3.2.3.tar.bz2 3. 解压后生成目录valgrind-3.2.3 4. cd valgrind-3.2.3 5. 运行./autog