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占用的内存大小,可惜无法看到增添内存的变化情况(数值太小)!