在C ++中发出复制和删除数组的问题

时间:2015-03-05 16:31:36

标签: c++ delete-operator

我最近一直在玩自己的插座和缓冲器。对于以下代码,我在我的类bufferSize中分配了一个字节缓冲区。缓冲区用作环绕,因此我还跟踪缓冲区的前后索引。

在下面的代码中,我分配一个本地缓冲区,该缓冲区是类成员缓冲区的大小减去当前缓冲区中的数据,然后将套接字数据读入其中。然后,我使用前/后索引将本地缓冲区复制到类缓冲区中。

编写的代码将打印预期的数据(我正在发送测试字符串)。但是,如果我取消注释本地缓冲区上的delete [],则也会删除类缓冲区中的数据。我已经尝试使用memcpy和strcpy将数据从本地复制到类缓冲区,但无济于事。但是,如果我从不删除本地缓冲区,这是一个明显的内存泄漏。

我认为我必须遗漏一些明显和愚蠢的东西,但对于我的生活,我无法看到它是什么。

int readIntoBuffer(int timeout) {
    int lbufsize = bufferSize-bytesAvailable();

    byte *local_buffer = new byte[lbufsize+1];

    // read into the local buffer
    int bytes_read = socket->recv(local_buffer, lbufsize, timeout);

    // null-terminate the local buffer
    local_buffer[bytes_read] = '\0';

    for (int i = 0; i < bytes_read; i++) {
        // copy into class buffer, byte by byte
        buffer[bufferBack] = local_buffer[i];

        // update back index
        bufferBack = (bufferBack + 1) % bufferSize;
    }

    // null-terminator at current end of class buffer
    buffer[bufferBack] = '\0';

    //delete[] local_buffer;  

    std::cout << buffer+bufferFront << std::endl;

    return bytes_read;
}

1 个答案:

答案 0 :(得分:0)

真正的问题与我原来的问题无关,我只是简单的指针管理在我的代码中创建未定义的行为。

基本上,我错误地将类成员用作另一个函数中的本地引用变量。退出函数后,类成员在超出范围时被删除。解决这个问题已经解决了上述问题。感谢大家的意见,很遗憾因为这样一个愚蠢的错误浪费你的时间!

相关问题