| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1452 人关注过本帖
标题:c++中用new实现c中realloc出错
取消只看楼主 加入收藏
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
结帖率:95%
收藏
 问题点数:0 回复次数:1 
c++中用new实现c中realloc出错
程序代码:
// 0415.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
using namespace std;
#include <stdlib.h>

const int nlen = 4;   //分配初始内存大小
const int nadd = 2;   //内存不足,增加内存

struct stack
{
    int *pa;
    int *pb;
    int nsize;
};

void create(stack &s);
void push(stack &s,int e);   //插入元素
void pop(stack &s, int &e);  //删除元素 
bool empty(stack &s);        //判断栈是否为空
void destory(stack &s);       //销毁栈

int main(int argc, char* argv[])
{
    while(1)
    {
        stack sql;
        create (sql);
        
        cout<<"please input a number:"<<endl;
        
        int nt;
        int e ; 
        cin>>nt;

        if(0 == nt)    //当输入0时,退出循环
        {
            return 0;
        }
        
        while(nt)
        {
            push(sql, nt%8);   //10进制数除以8,余数进栈
            nt = nt/8;
        }
        
        while(!empty(sql))    //余数出栈
        {
            pop(sql, e);
            cout<<e;
        }          
        cout<<endl;
        free(sql.pa);
        //system("cls"); 
        
        //delete [] sql.pa;
    }
    return 0;    
}

void create(stack &s)
{
    //s.pa = new int[nlen];
    s.pa = (int *)malloc(nlen * sizeof(int));
    if(!s.pa)
    {
        return ;
    }
    s.pb = s.pa;
    s.nsize = nlen;
}

void push(stack &s, int e)
{
    if(s.pb - s.pa >= s.nsize)
    {
        //delete [] s.pa;
        //s.pa = NULL;
        //s.pa = new int[(s.nsize + nadd)];
        s.pa = (int *)realloc(s.pa,(s.nsize + nadd) * sizeof(int));
        
        if(!s.pa)
        {
            cout<<"memory error!"<<endl;
        }
        s.pb = s.pa + s.nsize;    
        s.nsize += nadd;    
    }
    *(s.pb++) = e;
}

void pop(stack &s, int &e)
{
    if(s.pa == s.pb)
    {
        cout<<"error"<<endl;
    }
    e = *(--s.pb);
}

bool empty(stack &s)
{
    if(s.pa == s.pb)
    {
        return true;
    }
    else 
        return false;
}

void destory(stack &s)
{

}



我的重新分配为什么失败了,求解。另外我发现了一个有趣的事情,就是我把初始分配大小设为10000(大的数字可以看出内存变化),不释放指针,每输入一次数字,该程序占用内存增加40kb,正好1w个int占用的内存大小,可惜无法看到增添内存的变化情况(数值太小)!
搜索更多相关主题的帖子: realloc new 
2010-04-16 23:43
最近不在
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:5
帖 子:204
专家分:842
注 册:2010-2-28
收藏
得分:0 
realloc,成功了,是new失败了,不会弄,能帮写出new实现的代码吗?
2010-04-17 21:17
快速回复:c++中用new实现c中realloc出错
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019543 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved