有关使用VC2010编译出现的问题?共有两个问题
一个问题是有关warningC4172:返回局部变量或临时变量的地址的问题:代码如下,是有关栈的Pop函数(取出栈顶元素):T&Stack::Pop(){Node<T>*...
一个问题是有关warning C4172: 返回局部变量或临时变量的地址的问题:
代码如下,是有关栈的Pop函数(取出栈顶元素):
T &Stack::Pop()
{
Node<T>*p=top;
T x;
x=top->data;
top=top->link;
delete p;
return p;
}
请详解错误.
第二个问题就是我在按下ctrl+F5运行的时候,黑框中未出现任何东西,但是可以听到一声强烈的类似“咚”的警报声,但是未弹出任何出错窗口,我都不知道是怎么冒出来的啊 ,麻烦哪位高手不厌其烦的帮忙我解决这两个问题,积分是没问题的啊!先回答满意在给也不迟,打酱油的不欢迎,尤其是那种答非所问的 展开
代码如下,是有关栈的Pop函数(取出栈顶元素):
T &Stack::Pop()
{
Node<T>*p=top;
T x;
x=top->data;
top=top->link;
delete p;
return p;
}
请详解错误.
第二个问题就是我在按下ctrl+F5运行的时候,黑框中未出现任何东西,但是可以听到一声强烈的类似“咚”的警报声,但是未弹出任何出错窗口,我都不知道是怎么冒出来的啊 ,麻烦哪位高手不厌其烦的帮忙我解决这两个问题,积分是没问题的啊!先回答满意在给也不迟,打酱油的不欢迎,尤其是那种答非所问的 展开
1个回答
展开全部
最好是把T设置成全局的一个模板,这样比较好。
关于临时变量的问题,我认为把p作为参数传给pop更好一点,这样可以避免临时变量在函数退出时被释放的问题。
T* Stack::Pop(Node<T> *top)
{
T x;
x=top->data;
top=top->link;
return top;
}
我觉得这样做保险一点。因为用指针做函数参数来传递可以实现对原变量数据进行操作。如果你把top作为函数里的一个变量,那这个变量的作用域只局限于这个函数,函数一退出,这个变量的内存就自动释放了,里面的数据自然丢失!而作为传进来的参数的话,即时pop退出了,top也是一个外部的变量,内存不会因为pop 的退出而释放,这样才安全。
另外,怎么能delete以后再return呢?
报警声我就不知道了,没弹窗我一般都不管的。
关于临时变量的问题,我认为把p作为参数传给pop更好一点,这样可以避免临时变量在函数退出时被释放的问题。
T* Stack::Pop(Node<T> *top)
{
T x;
x=top->data;
top=top->link;
return top;
}
我觉得这样做保险一点。因为用指针做函数参数来传递可以实现对原变量数据进行操作。如果你把top作为函数里的一个变量,那这个变量的作用域只局限于这个函数,函数一退出,这个变量的内存就自动释放了,里面的数据自然丢失!而作为传进来的参数的话,即时pop退出了,top也是一个外部的变量,内存不会因为pop 的退出而释放,这样才安全。
另外,怎么能delete以后再return呢?
报警声我就不知道了,没弹窗我一般都不管的。
追问
我这个函数是一直向下压栈啊,弹出一个就要少一个节点,你如果不delete的话,那个值不是还是占据了位置啊,
追答
少一个节点你delete是没错,但是你把不要的节点返回是个什么用意?直接用void pop()不就可以了,你把p节点都delete掉了怎么返回呀?要返回就别delete,要delete么肯定就不能返回了。
浙江启扬智能科技有限公司
2023-06-12 广告
2023-06-12 广告
Linux 嵌入式系统中,USB 启动模式能够烧写 ARM 的 uboot 的原因主要有以下几个方面:1. USB 启动模式相对于传统的 BIOS 启动模式来说,具有更高的兼容性和灵活性,可以支持更多的硬件设备和操作系统。2. USB 启动...
点击进入详情页
本回答由浙江启扬智能科技有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询