【发布时间】:2013-02-28 10:45:47
【问题描述】:
问题如下:
有一个构造函数的调用,其中一个指针是一个参数
m_pszBuf= new char[260];
//Still valid , to prove i'm printing the address
std::cout <<"Address "<< (void*)m_pszBuf <<std::endl;
device = new Device(m_pszBuf);
Device::Device(char* _ptr){
strcpy(dest,_ptr);
}
有趣的是,在调用构造函数之前,指针仍然有效,并且有地址和值,但是一进入ctor,就变成了一个坏指针(0x0000005c)。另外,它是在调试模式下工作,而不是在发布模式下工作。
【问题讨论】:
-
那么第一行是无效的(假设您不能将
Foo*转换为Foo)。我们需要查看更多代码。ptr来自哪里? -
我希望你的意思是
Foo* f = new Foo(ptr) -
请贴一些真实的代码。过度简化它,你/我们错过了有问题的部分
-
除非“真实代码”由于“未声明的类型:设备”等原因无法编译。它的不是“真实代码”。此外,由于这是一个动态成员(并且 Device 将其用于看似同样邪恶的邪恶目的),请阅读 The Rule of Three 并确保所有指针拥有的资源(您应该努力使其拥有 none)在复制构造函数、赋值运算符和析构函数中得到适当的管理和说明。
-
发布最少的代码来演示您的问题并且仍然可以编译。如果您知道消除什么是不重要且安全的,则无需寻求帮助。这并不意味着发布大量代码:而是修剪所有您认为不相关的内容,定期确认问题仍然存在,直到您有一些简短但完整的内容。或者,写一个你认为会出现问题的小程序,确认它,然后发布。
标签: c++ pointers visual-studio-2005