2 qq 26766433 qq_26766433 于 2017.09.03 20:10 提问

关于C++的对象数组的问题

代码如下,学习C++的时候写的,在运行到abc.push(a)的时候崩溃了,请问有可能是什么原因?
#include
#include
#include
#include

using namespace std;

template
class stack{
private:
int maxSize;
int size;
int top;
type* content;
public:
stack();
bool isEmpty();
bool isFull();
bool push(const type & item);
bool pop(type& item);
virtual ~stack();
};

template
stack::stack(){
top = 0;
size = 0;
maxSize = 10;
type* content = new type10;
}

template
stack::~stack(){
delete [] content;
}

template
bool stack::isEmpty(){
return top == 0;
}

template
bool stack::isFull(){
return top == maxSize;
}

template
bool stack::push(const type& item){
if(this->isFull()){
return false;
}else{
content[top++] = item;
return true;
}
}

template
bool stack::pop(type& item){
if(this->isEmpty()){
return false;
}else{
item = content[--top];
return true;
}
}

int main(void){
stack abc;
string a = "abcdefg";
abc.push(a);
cout << abc.isEmpty() << endl;
cout << abc.isFull() << endl;
return 0;
}

5个回答

a996627519
a996627519   2017.09.04 22:52

兄弟,
stack::stack()
{
top = 0;
size = 0;
maxSize = 10;
type* content = new type[10];
}
这个type* content = new type[10];
你是重新定义了一个新变量type*content 然后把用这个新变量申请了动态内存
而这个新变量的生存期也只在构造函数结束后就没了
你在类里面定义的哪个type*content却傻愣的什么事也没被做,还是一指针
然后你又在push函数里面把这个连初始化都没有做过的指针当做数组用,嗯哼?

正确做法是把type* content = new type[10];这句里的type*去掉
因为
您已经定义过他了呀

u011261430
u011261430   2017.09.04 10:50

你这复制出来的代码应该不全,都是你自己写的,单步调试看看

zhang_guyuan
zhang_guyuan   2017.09.04 15:54

大概看了一下你的代码,你的count是一个指针,如果你想push一个长度大于1的string,必须要在构造函数用new分配内存,不然程序会挂掉。

CH1314QM
CH1314QM   2017.09.05 10:13

哥们儿代码贴的不全啊,楼上说的的确是存在的一个问题,你已经定义了content指针了,构造函数里面又定义了一个content,根据作用域的原则,构造函数中的content只是局部的还用new申请的内存空间,你又没释放,这里面就有内存泄漏了。另外,你这个写的是模板类么?type类型是模板实参?如果是的话为什么stack没有指定模板实参呢?你的代码我拷出来是错误的

qq_22203741
qq_22203741   2017.09.05 15:46

这种错误明显,单步调试下,你这代码贴出来也无法看清

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
对象数组 java
这是两个关于java对象数组的代码,帮助你理解对象数组。
对象数组的使用方法
关于对象数组的使用方法,对象数组是数据结构必须掌握的
C#中动态声明与使用对象数组实例
C#中动态声明与使用动态数组的实例。<br>不是最好的,演示了基本功能:<br>数组的声明与使用,先前数据的保护,对象的实例化,对象空间释放。
贪心算法-活动安排问题C程序
主要是使用贪心算法,实现活动安排的个数最多
数据结构课程设计--文本格式化(c编写)
数据结构课程设计--文本格式化(c编写) 内有源文件 可执行文件 实验报告
PV操作实现生产者消费者问题
PV操作实现生产者消费者问题PV操作实现生产者消费者问题PV操作实现生产者消费者问题PV操作实现生产者消费者问题
C++的头文件问题
关于C的头文件问题,介绍了头文件避免重复包含的问题
C++面向对象课程序设计课件
一、对象数组 可以定义对象数组处理多个对象 例【3.17】利用hhpoint.h中的point类建立对象数组并分析程序的结果。
C语言精彩编程百例
C语言精彩编程百例一些关于C的代码。和问题
约瑟夫环问题
大学c语言 c   关于约瑟夫环的问题代码