下断点后提示"没有可用于当前位置的源代码",以前没碰过,望指教!

tangshuiling 2009-03-04 10:11:51

一个引用计数的测试类,本想单步看看~~!
#include <iostream>
using namespace std;
class reference
{
public:
reference(const char* x=""):value(new count(x)){}
reference(const reference&rhs):value(rhs.value)
{
++value->refcount;
}
~reference(){
if(--value->refcount==0) {delete value;}

}

const char* str()
{
return value->data;
}
private:
struct count
{
int refcount;
char* data;
count(const char* ele):refcount(1) { data=new char[strlen(ele)+1];
strcpy_s(data,strlen(ele)+1,ele);
}
~count() {delete []data; } //在这里下断点就有此提示,不知何故,是delete指针的问题?
};
count *value;
};

int _tmain(int argc, _TCHAR* argv[])
{
reference test("hello world!");
cout<<test.str()<<endl;
reference dest=test;
return 0;
}


...全文
278 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
Sco_field 2009-03-05
  • 打赏
  • 举报
回复
用V6调了一下,可以打断点,跑起来没问题。
arong1234 2009-03-05
  • 打赏
  • 举报
回复
为什么时代码问题?如果你仅仅是不能设置断点问题,当然和代码没关系,如果你直接运行结果会不对,才考虑代码问题。不过代码是否有问题,你说得现象只和调试器有关,和代码本身无关。

[Quote=引用 2 楼 tangshuiling 的回复:]
引用 1 楼 arong1234 的回复:
你调试器不能正确得匹配执行代码可源代码,可能是调试器bug
不是你代码问题

应该是代码有问题,但一时半会没看出来,我用dev c++调试也停止在相同的位置不知何故?
[/Quote]
我不是大明 2009-03-05
  • 打赏
  • 举报
回复
你在删除对象的地方,就是delete 这个object 的方,再用单步跟踪进函数你看在行不?
ckc 2009-03-05
  • 打赏
  • 举报
回复
你把一行的代码写成几行试试
再不行那里只写定义,把实现代码放到外面来
ltc_mouse 2009-03-05
  • 打赏
  • 举报
回复
lz说的断点问题,应该是指程序运行到断点后,单步执行下一步时,跳出那个提示框吧? 我这里的VS2003上是这样~

在那个位置设置断点,执行时中断,再F5跑完程序,自然没有问题了~
tangshuiling 2009-03-05
  • 打赏
  • 举报
回复
感谢大家的解答,特别是荣哥、ltc_mouse 、ckc ,按照ckc的办法可行.
xtting_8984313 2009-03-05
  • 打赏
  • 举报
回复
如果遇到这种问题,首先看一下.pdb是否生成了。

如果生成了,吧.pdb这类的临时文件删除,完全build,再看一下。
  • 打赏
  • 举报
回复
汗,跑了没问题啊.
xuguod20042576 2009-03-04
  • 打赏
  • 举报
回复
mark
mabo321 2009-03-04
  • 打赏
  • 举报
回复
没问题……
VC2005 单步可以……
jakqigle 2009-03-04
  • 打赏
  • 举报
回复
我调试的时候单步走了一遍后,在不能设置断点就可以在那里设置短点了。不知道怎么回事A。
ltc_mouse 2009-03-04
  • 打赏
  • 举报
回复
我觉得是因为你这个count *value是new出来的,在delete时调用的~count(),函数层次如下:

operator delete class
call the destructor... ///断点在这里面的~count(),下一步将是free memory,不是我们的源代码文件...
free the memory of the class
ret

出来提示后,可以选择"反汇编",就能看到类似上面的结构~
jakqigle 2009-03-04
  • 打赏
  • 举报
回复
我觉得是不是写的类中代码并没有别调用,因为还没有用到类构建一个对象,没有调用到类中的东西。只是做了内部的一些初始工作吧。

只有在运用到reference类的地方才对调试有意义啊。
lingyin55 2009-03-04
  • 打赏
  • 举报
回复
关注
tangshuiling 2009-03-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arong1234 的回复:]
你调试器不能正确得匹配执行代码可源代码,可能是调试器bug
不是你代码问题
[/Quote]
应该是代码有问题,但一时半会没看出来,我用dev c++调试也停止在相同的位置不知何故?
arong1234 2009-03-04
  • 打赏
  • 举报
回复
你调试器不能正确得匹配执行代码可源代码,可能是调试器bug
不是你代码问题

64,648

社区成员

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

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