Chicko Bueno
Chicko Bueno

Reputation: 337

Problem: Getting buffer data

I'm trying to get my buffer copied into another buffer but I cant get the actual value.

Here is how my program flows: 1. Create random integers 2. Convert it into char 3. Store them into STL container 4. Retrieve first element from the container 5. Convert it into int form

Here is my header file:

struct BufferData
    {
        char *m_BufferData;
        int m_Size;
    };

private:
typedef std::vector<BufferData *>BufferVector;
    BufferVector m_RecvBuffer1, m_RecvBuffer2, m_RecvBuffer3;
    typedef std::vector<BufferData *>::iterator BufferVectorIterator;
    BufferVectorIterator IterBuffer1, IterBuffer2, IterBuffer3;

And here is my cpp file:

Consider only step #4 and #5.

void CUdpSocket::GetEachBuffer(char *BufferSource1, char *BufferSource2, char *BufferSource3)
{
    if(!m_RecvBuffer1.empty())
    {
        IterBuffer1 = m_RecvBuffer1.begin();
        memcpy(BufferSource1, *IterBuffer1, BUFFER_SIZE);
        m_RecvBuffer1.erase(IterBuffer1);
    }
    else
        memcpy(BufferSource1, 0, BUFFER_SIZE);

    if(!m_RecvBuffer2.empty())
    {
        IterBuffer2 = m_RecvBuffer2.begin();
        memcpy(BufferSource2, *IterBuffer2, BUFFER_SIZE);
        m_RecvBuffer2.erase(IterBuffer2);
    }
    else
        memcpy(BufferSource2, 0, BUFFER_SIZE);

    if(!m_RecvBuffer3.empty())
    {
        IterBuffer3 = m_RecvBuffer3.begin();
        memcpy(BufferSource3, *IterBuffer3, BUFFER_SIZE);
        m_RecvBuffer3.erase(IterBuffer3);
    }
    else
        memcpy(BufferSource3, 0, BUFFER_SIZE);
}

Here is my output:

m_RecvBuffer1   [1](0x0034feb8 {m_BufferData=0x0034bc28 "45" m_Size=4 })
BufferSource1   0x0034bca8 "(¼4"    char *

Now as you can see my BufferSource1 become (¼4. It should display 45 in char form instead. How do I fix this? Please help.

Thank you.

Upvotes: 0

Views: 171

Answers (1)

Sarfaraz Nawaz
Sarfaraz Nawaz

Reputation: 361402

Change this:

memcpy(BufferSource1, *IterBuffer1, BUFFER_SIZE);

to this:

memcpy(BufferSource1, (*IterBuffer1)->m_BufferData, (*IterBuffer1)->m_Size);

Because the type of m_RecvBuffer1 is std::vector<BufferData*>, not std::vector<char*>.

Change similarly for others!

Upvotes: 4

Related Questions