指针在发布版本中丢失

Pointer gets lost in the release build

本文关键字:版本 布版本 指针      更新时间:2023-10-16

问题如下:

有一个构造函数调用,其中指针是参数

 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);
}

有趣的是,在调用构造函数之前,指针仍然是有效的,并且有地址和值,但是一旦它进入了actor,它就变成了一个坏指针(0x0000005c)。此外,它在调试模式下工作,而不是在发布模式下工作。

初始化m_pszBuf:

m_pszBuf = new char[260];

然后像这样调用Device构造函数:

device = new Device(m_pszBuf);

Device构造函数内部,有一个m_pszBuf源的strcpy调用:

Device::Device(char* _ptr) // _ptr == m_pszBuf
{
    strcpy(dest, _ptr);
}

但是如果m_pszBuf不是null终止的,strcpy不会在分配的缓冲区结束时停止,它可以从越界内存中复制垃圾,并且可以溢出dest缓冲区。

因此,在将m_pszBuf传递给Device构造函数之前,请确保它是以空结束的,并且strcpy的目标指针足够大

注意:此分析仅基于您展示的代码片段。(我不知道在你的实际代码中,你是否省略了显示其他问题。)

伟大的输入,但我已经解决了它与其他东西。我有一些头文件"不同步",用于库。我只需要更新它们。奇怪的是,这对其他事情的影响