坏指针和乱码数据

时间:2017-04-20 06:48:43

标签: c++ pointers visual-c++ memory-management

请原谅我,如果我听起来很愚蠢,但我是一名生物学专业的学生,​​最终从事软件开发工作(从未在编码方面有过一门专业)。所以编码不是我的强项,但我真的想学习。

现在已经不在了:指针。

我正在用Visual C ++编写一个用于串行通信的应用程序,并且花了最后三天努力输出正确的数据。

这是相关的代码块:

//The ports have been opened, data has been written and the  rest follows
//Initialising buffer

DWORD dwBytesRead = 0;
BYTE*  abBuffer = NULL; // Instance 1


do
{
    // Read data from the COM-port
    serial2.Read(&abBuffer,sizeof(&abBuffer),&dwBytesRead); // Instance 2
    if (dwBytesRead > 0)
       {
        CString a=(LPCTSTR)&abBuffer;//To check what is being read        
        SetDlgItemText(IDC_RECV,(LPCTSTR)&abBuffer);


}
else
MessageBox("No");
}
while (dwBytesRead == sizeof(&abBuffer));
//delete[] abBuffer; 
//Close the port again

调试时我可以看到实例1“abBuffer”是

abBuffer 0xcccccccc unsigned char *

在实例2中它是

abBuffer 0x00000000 unsigned char *

我知道实例1的值是一个模式代码,因为我在该行之前放置了一个断点,2是NULL, ,但为什么坏指针? < / p>

我收到的数据也很奇怪。

尝试1:

已发送数据:“hi”

收到的数据:“hiÜÜÌÌÌÌÌÌ”

尝试2:

发送数据:“hihihi”

收到的数据:“hiÜÜÌÌÌÌÌÌ”

尝试3: 检查数据的哪一端被剪切

已发送数据:“aibicidi”

收到的数据:“cidiÌÌÌÌÌ”

else子句触发 为什么?

尝试4: 要检查截止是什么,结果是4个字节

已发送数据=“迈克”

收到数据=“mikeÌÌÌÌÌ”

else子句触发

为什么我的数据可能会出现乱码?

有三个主要问题,但它们是相关的,这就是我在这里的原因。

帮助?

1 个答案:

答案 0 :(得分:1)

你有多个问题。从abBuffer开始是一个空指针。您无法将数据写入指向的位置。其次,&abBuffer为您提供指向变量 abBuffer的指针。

第一个问题的解决方案是为abBuffer分配内存以指向。这是最简单的方法,使用数组而不是指针。

第二个问题的解决方案是不使用address-of运算符,而是使用plain abBuffer