永发信息网

C++ 构造函数

答案:1  悬赏:0  手机版
解决时间 2021-05-08 10:08

// 注释标出问题所出

#include <cstdlib>

#include <cstring>

#include <iostream>

using namespace std;

class str
{
public:

str(){ _string = 0, _size = 0; }

str(const char *pstr);

str(const str&);

int size(){ return _size; }

const char *c_str() { return _string; }

~str(){ free((void *)_string); }

private:

int _size;

char* _string;
};

str::str(const char *pstr)
{
if(!pstr)
{
_string = 0;

_size = 0;

return ;
}

_size = strlen(pstr);

// why here when use the _string = new char[_size + 1] expression cause the problem below:

// there is no source code available to the current location;


_string = (char *)malloc(_size + 1);

// do not test malloc failure

strcpy(_string, pstr);
}


str::str(const str& rhs)
{
if(rhs._string == 0)
{
_string = 0;

_size = 0;
}

else
{ // why the below statemenets cause the problem:

//Unhandled exception at 0x102d12b4 in conversion.exe: 0xC0000005: Access violation reading location 0xccccccc8.

free((void *)_string);

_size = rhs._size;

_string = (char *)malloc(_size + 1);

// do not test malloc failure

strcpy(_string, rhs._string);
}
}

int main()
{

str strobj1("C++ Premier");

str strobj2(strobj1);

std::cout << strobj1.c_str() << "\n"

<< strobj2.c_str() << "\n";
}

最佳答案
就是刚才那个问题吗?

注释掉复制构造函数里的free函数就ok了,估计是你逻辑不对,复制构造不同复制赋值(operator = ),只要调用了一定是构造了一个新对象,_string肯定是要初始化为0的,这之前不可能会存着有效的值,所以无需free
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
如何提高CF运行速度
在弹簧测力计下挂一实心物体,弹簧测力计的示
QQ输入法手机怎么调手写
DNF 散打这两个技能怎么加?弱点感知 柔化肌
无锡在上海哪个方向
天龙八部2充值里面那个积分有什么用
迈克尔.杰克逊哪年生的,死于那年,活了多少
周庄村在哪里啊,我有事要去这个地方
ghost11如何备份。。可以重装系统么?
吸光度为负值代表什么,吸光度怎么是负值
大话西游二客栈任务
谁知道这 钢琴曲小集合 的几首曲子的名字是什
三星E1120多少钱
帮我写几篇英语日记啊
CF是怎么游戏
推荐资讯
荣华街这个地址在什么地方,我要处理点事
13个月幼儿心跳1分钟跳几下
为什么我这么有才?
Q币可不可以送人?
假如我消失了谁会在意?
DNF含光图纸哪里出?
为什么俄的QQ显示位置跟俄本身所在的位置吥同
写长安的最著名的诗句,十里秦淮夫子庙的诗句
请人办事出什么烟
如果我的工商卡开了支付宝,我的建行卡还可以
学街头篮球之前,要具备些什么条件?
西安哪有卖步步高手机的原装耳机的?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?