首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
export
char
hashtable
actionscrip
join
httprequest
testing
config
integer
merge
bytecode
php
string
hashcode
command
buffer
dagger
typescript
javascript
python
node.js
copy
list
hashset
python2
web
cPlusPlus
email
require
format
web3
tags
heatmap
replace
search
get
frameworks
keyword
vbscript
int
future
jar
random
hash
js
grid
php7
post
express
import
select
ascii
vba
plugins
byte
md5
emoji
install
cmd
hook
spring
dll
utf-8
php5
bit
python3
split
expression
input
java
iostream
request
function
ip
jsp
scala
cookie
default
instance
当前位置:
开发笔记
>
编程语言
> 正文
请教!临时对象析构失败
作者:mobiledu2502894591 | 来源:互联网 | 2023-05-18 04:59
编一个C++程序的时候,遇到了如下问题,请指教#include<iostream>#include<string>usingnamespacestd
编一个C++程序的时候,遇到了如下问题,请指教
#include
#include
using namespace std;
class str //这是一个简单的字符串类
{
char *p;
size_t len;
str(size_t l) { p=new char[(len=l)+1]; cout << (void *)p << " Allocated (size_t)\n"; }
public:
str() { p=new char[1]; p[len=0]=0; };
str(const char *src) {
p=new char[(len=strlen(src))+1]; strcpy(p, src);
cout << (void *)p << " Allocated (const char*)\n"; // 这些输出语句都是跟踪运行过程的
}
str(const str &src) {
p=new char[(len=src.len)];
strcpy(p, src.p);
cout << (void *)p << " Allocated (const str&)\n";
}
str operator=(const str& src)
{
delete[] p;
p=new char[(len=src.len)];
strcpy(p, src.p);
return *this;
}
str operator+(const str& src)
{
str ret(len+src.len); // [1]
strcpy(ret.p, p); strcpy(ret.p+len, src.p);
return ret; // [2]
}
~str() {
cout << "Deallocating " << (void*)p << "...";
delete[] p;
cout << " Succeeded\n";
}
};
main()
{
str s("Ok"); //[3]
s+s; // [4]
cout << s.makestr() << endl;
}
执行结果:
00342490 Allocated (const char*) //这是执行[3]时构造函数为字符指针分配的内存
003426D0 Allocated (size_t) //这是执行[3]时构造函数为字符指针分配的内存
00342718 Allocated (const str&) //这是执行[3]时构造函数(copy constructor)为指针分配的内存
Deallocating 003426D0... Succeeded //[1]处分配的内存在退出函数operator+时成功地被释放
Deallocating 00342718... //[4]处产生的临时str对象的正在析构
然后就弹出一个错误对话框:
Debug Error!
DAMAGE: after Normal Block(#??) at 0x????????
请问这是为什么?
9 个解决方案
#1
还有,我用的是vc.net编译器……
#2
s.makestr()???
表示疑惑
#3
抱歉,很多无关的内容都删除了,漏了那个,那一行也不要了
#4
别用托管C++,先用native的看看.
managed c++的内存分配与本地C++内存分配完全不同.
#5
我建立的是win32 console, 无mfc, 无atl, 也不存在托管问题。
#6
谁帮帮我,分析一下程序?谢了!
#7
这与返回方式有关,如果返回的是引用类型,就不会出现问题。
当返回一个object,实际上编译器作了手脚,将class重的每一个成员变量
push到stack,然后函数体中的局部对象就析构了。然后再main函数中
根据stack中的值重新构造一个对象.如果返回的对象中有指针,那么返回的
是一个指针的地址。指针指向的内容已经在局部对象中释放掉了。因此在
main函数中重新构造的临时对象的指针p指向的内容已经无意义了,删除必然
出错。
看到出错的时候,construct 函数调用了3次,而析构函数却只调用了1次,
调用第二次的时候出现了错误,这个就是在main函数中的临时对象析构是出
现了问题
#8
说实在的,这个程序有很多问题,比如
str operator+(const str& src)
{
str ret(len+src.len); // [1]
strcpy(ret.p, p); strcpy(ret.p+len, src.p);
return ret; // [2]
}
应是const str的返回值,我建议先看看effective c++
#9
感谢两位的建议。
<
>才啃完一半不到,<
>还要一段时日。我会尝试修改。
小刚的话我再回去好好琢磨一下
更正一下笔误:
00342490 Allocated (const char*) //这是执行[3]时构造函数为字符指针分配的内存
003426D0 Allocated (size_t) //这是执行[1]时构造函数为字符指针分配的内存
00342718 Allocated (const str&) //这是执行[2]时构造函数(copy constructor)为指针分配的内存
include
ios
string
char
const
main
copy
编译
native
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
require
贪心与优先队列:最小化加法代价问题
本题要求在一组数中反复取出两个数相加,并将结果放回数组中,最终求出最小的总加法代价。这是一个经典的哈夫曼编码问题,利用贪心算法可以有效地解决。 ...
[详细]
蜡笔小新 2024-12-20 23:20:38
copy
深入解析JavaScript数组的创建与常用方法
JavaScript中的数组是数据集合的核心结构之一,内置了多种实用的方法。掌握这些方法不仅能提高开发效率,还能显著提升代码的质量和可读性。本文将详细介绍数组的创建方式及常见操作方法。 ...
[详细]
蜡笔小新 2024-12-21 12:06:37
string
主调|大侠_重温C++
主调|大侠_重温C++ ...
[详细]
蜡笔小新 2024-12-20 20:43:56
php
HDU 2871 内存管理问题(线段树优化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2871。本题涉及内存管理操作,包括重置、申请、释放和查询内存块。通过使用线段树进行高效管理和维护。 ...
[详细]
蜡笔小新 2024-12-20 10:59:14
web
UNIX进程间通信(IPC)详解
本文深入探讨了UNIX/Linux系统中的进程间通信(IPC)机制,包括消息传递、同步和共享内存等。详细介绍了管道(Pipe)、有名管道(FIFO)、Posix和System V消息队列、互斥锁与条件变量、读写锁、信号量以及共享内存的使用方法和应用场景。 ...
[详细]
蜡笔小新 2024-12-20 10:14:51
string
KMP算法在字符串中的应用
KMP算法是处理字符串匹配的一种高效算法它首先用O(m)的时间对模板进行预处理,然后用O(n)的时间完成匹配。从渐进的意义上说,这样时间复 ...
[详细]
蜡笔小新 2024-12-20 09:52:11
web
Issue with @name Annotation in Documentation Generation
This post discusses an issue encountered while using the @name annotation in documentation generation, specifically regarding nested class processing and unexpected output. ...
[详细]
蜡笔小新 2024-12-21 13:50:08
string
HDU5444:暴力求解策略
本文介绍了如何使用暴力方法解决HDU5444问题。代码通过逐个检查输入数据,确保在所有情况下都能找到正确的解决方案。 ...
[详细]
蜡笔小新 2024-12-21 13:05:28
string
二叉树的链表实现
本文介绍了一种使用链表结构表示二叉树的方法。通过定义节点结构和相关操作函数,可以方便地创建、插入和遍历二叉树。 ...
[详细]
蜡笔小新 2024-12-21 11:37:21
email
Linux环境下进程间通信:深入解析信号机制
本文详细探讨了Linux系统中信号的生命周期,从信号生成到处理函数执行完毕的全过程,并介绍了信号编程中的注意事项和常见应用实例。通过分析信号在进程中的注册、注销及处理过程,帮助读者理解如何高效利用信号进行进程间通信。 ...
[详细]
蜡笔小新 2024-12-21 10:29:05
char
符号三角形问题的回溯算法解析
本文探讨了符号三角形问题,该问题涉及由相同数量的“+”和“-”符号组成的三角形。通过递归回溯法,可以有效地搜索并计算符合条件的符号三角形的数量。 ...
[详细]
蜡笔小新 2024-12-21 10:02:45
join
前端算法挑战:多维数组拍平与括号匹配
本文将继续探讨前端开发中常见的算法问题,重点介绍如何将多维数组转换为一维数组以及验证字符串中的括号是否成对出现。通过多种实现方法的解析,帮助开发者更好地理解和掌握这些技巧。 ...
[详细]
蜡笔小新 2024-12-21 08:33:59
php
C++对象模型研究:运行时行为分析
本文探讨了C++编程中理解代码执行期间复杂度的挑战,特别是编译器在程序运行时生成额外指令以确保对象构造、内存管理、类型转换及临时对象创建的安全性。 ...
[详细]
蜡笔小新 2024-12-20 18:47:33
char
C语言数据类型详解
本文详细介绍了C语言中的基本数据类型,包括整型、浮点型、字符型及其各自的子类型,并探讨了这些类型在不同编译环境下的表现。 ...
[详细]
蜡笔小新 2024-12-20 15:03:51
string
计算整数位数与基础编程示例
本文介绍了如何通过Java代码计算一个整数的位数,并展示了多个基础编程示例,包括求和、平均分计算、条件判断等。 ...
[详细]
蜡笔小新 2024-12-20 23:46:25
mobiledu2502894591
这个家伙很懒,什么也没留下!
Tags | 热门标签
export
char
hashtable
actionscrip
join
httprequest
testing
config
integer
merge
bytecode
php
string
hashcode
command
buffer
dagger
typescript
javascript
python
node.js
copy
list
hashset
python2
web
cPlusPlus
email
require
format
RankList | 热门文章
1
Ubuntu系统清理残余配置文件和无用内容的方法
2
gym102222KVertex Covers(高维前缀和,meet in the middle)相关的知识介绍及解题思路
3
关于数据库设计的建议和注意事项
4
[echarts] 同指标对比柱状图相关的知识介绍及应用示例
5
Java图形化计算器设计与实现
6
自学Vue的第01天,学习目标、学习资料和方法
7
计算机信息传送控制方式教学内容及方法介绍
8
链表的基本操作——以及链表面试题
9
Git版本控制工具中自动增加版本号的替代方案
10
图书馆管理系统功能详解及主要代码
11
在IDEA中运行CAS服务器的配置方法
12
致广大discuz、phpwind论坛站长——UC论坛模式论坛识别规则公告
13
通过Anaconda安装tensorflow,并安装运行spyder编译器的完整教程
14
php tokenizer获取所有类,PHP Tokenizer 学习笔记
15
canvas.toDataURL('image/png')报错处理方法
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有