小错误,有点糊涂,求指教

Elinx 2013-11-13 09:20:27
#include <vector>

class CRect {
public:
CRect();
CRect(int _x, int _y):x(_x), y(_y) {}
int x;
int y;
};

std::vector<CRect *>* vsVector;

int main()
{
vsVector = new std::vector<CRect*>;

vsVector->push_back(new CRect(1, 3));

vsVector[0]->x = 6;// Error!!! WHY???

delete vsVector;

return 0;
}
...全文
256 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
wb_rock 2013-11-26
  • 打赏
  • 举报
回复
to18楼: 拷贝是指针的指向的内容,而不是指针值本身。如果拷贝指针值本身,在释放的时候就不好处理了
Elinx 2013-11-19
  • 打赏
  • 举报
回复
引用 16 楼 song2012craft 的回复:
注意防侧漏
已漏~~~~
Elinx 2013-11-19
  • 打赏
  • 举报
回复
引用 17 楼 buyong 的回复:
delete vsVector; 这之前被你new出来,放到vector里的都要delete. 你这么用,还不如直接数组。 vector一般不存指针
我也发现了,存个vector指针是自寻烦恼,,,, 我当初的考虑是因为这个对象如果很大的话保存在另外一个对象里边一个指针比较好~~~
Elinx 2013-11-19
  • 打赏
  • 举报
回复
引用 14 楼 wb117908406 的回复:
引用 10 楼 wb117908406 的回复: vector里边存的是对象的引用,不需要new 不对、、、、是拷贝 深拷贝
不是浅拷贝么?!!!!
qq120848369 2013-11-14
  • 打赏
  • 举报
回复
你new的vector返回的是一个地址,应该存在指针里。
todd_leftcode 2013-11-14
  • 打赏
  • 举报
回复
楼主是从Java或.net过来的吧? C++里不是啥都需要new的。 楼上各们改得不错,但那些delete怕也保不齐,STL一般都使用异常。
wb_rock 2013-11-14
  • 打赏
  • 举报
回复
引用 10 楼 wb117908406 的回复: vector里边存的是对象的引用,不需要new 不对、、、、是拷贝 深拷贝
Elinx 2013-11-14
  • 打赏
  • 举报
回复
引用 10 楼 wb117908406 的回复:
vector里边存的是对象的引用,不需要new
不对、、、、是拷贝
Elinx 2013-11-14
  • 打赏
  • 举报
回复
引用 9 楼 todd_leftcode 的回复:
楼主是从Java或.net过来的吧? C++里不是啥都需要new的。 楼上各们改得不错,但那些delete怕也保不齐,STL一般都使用异常。
我要存指针,所以要new
Elinx 2013-11-14
  • 打赏
  • 举报
回复
引用 8 楼 mougaidong 的回复:
就这20行不到的代码,就已经内存泄漏了。 你合计合计吧 学习一下std::unique_ptr<>吧 有余力,还可以学习下boost::ptr_vector
确实如此,一不小心就漏了、、、 谢指点、、、、、
wb_rock 2013-11-14
  • 打赏
  • 举报
回复
vector里边存的是对象的引用,不需要new
buyong 2013-11-14
  • 打赏
  • 举报
回复
delete vsVector; 这之前被你new出来,放到vector里的都要delete. 你这么用,还不如直接数组。 vector一般不存指针
捣蛋不对 2013-11-14
  • 打赏
  • 举报
回复
注意防侧漏
turing-complete 2013-11-13
  • 打赏
  • 举报
回复
就这20行不到的代码,就已经内存泄漏了。 你合计合计吧 学习一下std::unique_ptr<>吧 有余力,还可以学习下boost::ptr_vector
w195438178 2013-11-13
  • 打赏
  • 举报
回复
vsVector是指针,*vsVector才能取到vector容器,然后(*vsVector)[0]才是第一个元素
Elinx 2013-11-13
  • 打赏
  • 举报
回复
引用 2 楼 mougaidong 的回复:
#include <vector>

class CRect {
 public:
  CRect();
  CRect(int _x, int _y):x(_x), y(_y) {}
  int x;
  int y;
};

std::vector<CRect *>* vsVector;

int main(int argc, char* argv[]) {
  vsVector = new std::vector<CRect*>;
  vsVector->push_back(new CRect(1, 3));
  (*vsVector)[0]->x = 6;// Error!!! WHY???
  delete vsVector;
}
另,友情提示:这种代码是在玩儿火,工程中不能使用。
求大神,,,为什么不能用呢?
Elinx 2013-11-13
  • 打赏
  • 举报
回复
引用 3 楼 wangdahu888 的回复:

#include <vector>

class CRect {
public:
	CRect();
	CRect(int _x, int _y):x(_x), y(_y) {}
	int x;
	int y;
};

std::vector<CRect *>* vsVector;

int main()
{
	vsVector = new std::vector<CRect*>;

	vsVector->push_back(new CRect(1, 3));

	(*vsVector)[0]->x = 6;// 只有vector对象才能这样用呀!!!!

	delete vsVector;

	return 0;
}
额,,,是这样啊,,,,,,
Elinx 2013-11-13
  • 打赏
  • 举报
回复
为什么不能用啊????
  • 打赏
  • 举报
回复

#include <vector>

class CRect {
public:
	CRect();
	CRect(int _x, int _y):x(_x), y(_y) {}
	int x;
	int y;
};

std::vector<CRect *>* vsVector;

int main()
{
	vsVector = new std::vector<CRect*>;

	vsVector->push_back(new CRect(1, 3));

	(*vsVector)[0]->x = 6;// 只有vector对象才能这样用呀!!!!

	delete vsVector;

	return 0;
}
turing-complete 2013-11-13
  • 打赏
  • 举报
回复
#include <vector>

class CRect {
 public:
  CRect();
  CRect(int _x, int _y):x(_x), y(_y) {}
  int x;
  int y;
};

std::vector<CRect *>* vsVector;

int main(int argc, char* argv[]) {
  vsVector = new std::vector<CRect*>;
  vsVector->push_back(new CRect(1, 3));
  (*vsVector)[0]->x = 6;// Error!!! WHY???
  delete vsVector;
}
另,友情提示:这种代码是在玩儿火,工程中不能使用。
加载更多回复(1)
汉化说明 与许多初学者一样,我在开始学习Delphi时,面对全英文的界面,很是不习惯。在Delphi5.0时就开始对Delphi进行汉化。但效果并不明显,也就没好意思拿出来。但心中总是感到有些遗憾,为什么Delphi这样好的编辑工具,始终不推出简体中文版呢? 一直等到Delphi7.0时,Smallfish终于等不住了,为了Delphi在华夏大地上的传播与推广,SmallFish决定自己动手,汉化出真正属于中国人的简体中文Delphi程序开发工具。 SmallFish通过几个星期的艰苦奋战,在Delphi7.06的英文版的基础上,终于推出了现今汉化最好的Delphi7.0简体中文版。 Delphi7资源汉化包的源文件 其中SmallFish汉化的部分是*.bpl、*.exe及其它文件,而Lib中的文件及Source文件夹中的文件是LiWD完成的,我也加到了我的文件夹中,在此表示感谢!为了表示对他劳动的尊重,将他汉化时的文字在后面附加了。 下面,向大家介绍一下使用方法,首先关闭Delphi7.0的运行,打Winsystem文件夹下的所有文件,覆盖到系统目录下(如C:WindowsSystem);然后,将Bin、Lib文件夹下的所有文件覆盖到Delphi安装目录的Bin中。至于Source文件,可以覆盖到相应文件夹中,也可以不做任何操作。 为了减少大家的开支,我将文件的大小尽可能缩小,也不得已使用可执行程序压缩工具对.Exe文件、.Bpl文件进行压缩。但还是很大,请大家原谅。如果想修改,可以以下面的邮件地址向我索取没有压缩的文件,我会抽时间发给你们。 最后,要说明的是,汉化到现在,发现要推出完全汉化的Delphi,以我的精力和能力来说,还要等一定时间。因为需要汉化的资源太多,以典型安装为例,可能需要汉化的文件多达200个左右,而且是都是DELPHI程序,无法借助字典批量翻译,工作量实在巨大。同时随汉化的深入,发现许多要翻译的字符没有把握准确译出,恐怕翻译后让大家更糊涂,加上马一就要毕业答辨,我只好暂时把汉化工作停一下,只是将手头现有的部分拿出来与大家共享,因水平有限,翻译错误在所难免,请不吝指教!以便我日后推出汉化Delphi时,做最后的修正。 我汉化Delphi不是为了出名。没有任何商业目的,不希望出现Delphi简体中文版应用于商业的现象发生,但为了表明大家对我的工作尊重,也不要修改我在可执行文件版本信息中加的一行字-汉化:SmallFish。如果向朋友推广,也不要把我编写的汉化说明删除,我只是想通过这样的一个难得机会,结识更多像我一样酷爱Delphi的网友。 如果你有什么好的建议,请给我发电子邮件电子邮件地址SmallFish@0335.net或LiYuguo@0335.net,我尽量抽时间回答网友的提问。不要向我要Oicq或其它联系方式,恕我不公开。常见问题: 1.为什么汉化Delphi7.0在运行时菜单没有快捷键但按下Alt键后,就有了。能不能改进一下? 答:这是Delphi7.0本身的原因,并不是我汉化资源文件有误,不信你将Delphi原文件覆盖回去试试,一样存在此问题。 2.为什么编译信息一部分是英文,另一部分是中文? 答:这是因为我汉化不完全造成的。 3.什么时候会推出Delphi7.0的其它汉化资源? 答:时间不会太长,只要大家支持。 4.如果我向你的信箱中发送其它控件的汉化请,能不能帮我完成? 答:如果时间允许,控件好用,我会满足您的要,但有一个条件,留下您的联系方式,交一个朋友。:)附:网友LiWD原文汉化说明 这是Delphi7的一些资源文件的汉化,是我从Delphi6改编的,由于英文水平有限,错误在所难免,并且有些单元没有汉化,如果你修改或汉化了其他单元,别忘了给我一份! 用Delphi7 打开 Project1.dpr, 进行编译,即可得到相应的dcu文件! 上传:李岚文 QQ:270181856 E_-mail:llw.lz@126.com 曾上传作品:柯龙进销存 希望能给初学Delphi 7的朋友带来帮助 ^_^

64,648

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧