C++程序在删除一个char数组时退出

C++ program Exits when deletes an char array

删除数组元素时出现问题。 您可以在下面看到我的一些代码。

在第二个 for 循环 delete[] payload[x].data 的第二个 运行 之后,程序退出。

    struct s_payload{
        u_char data[300];
    }
    .
    .
    u_char sample[300] ="Lorem ipsum dolor sit amet, eu mea laudem impetus.";
    int _bufferSizeConnection = 1000;
    int testCounter = 0;
    s_payload* activeBuffer = new s_payload[_bufferSizeConnection];
    for (;;) {
        for (long int counter = 0; counter < _bufferSizeConnection; counter++) {        
            memcpy(activeBuffer[counter].data, sample, 299);
        }
        //_buffersConnection is std::queue
        _buffersConnection.push(activeBuffer);
         testCounter += 1;
        if (testCounter == 15) {
            LOG_INFO(">testcounter %d", testCounter);
            break;
        }            
        activeBuffer = new s_payload[_bufferSizeConnection];                       
    }        
    for (int i = 0; i < 15; i++) {
        //taking one of the activeBuffer from _buffersConnection
        s_payload* payload = _buffersConnection.wait_and_pop();         
        for (int x = 0; x < _bufferSizeConnection; x++) {
            u_char* current= payload[x].data;
            delete[] payload[x].data;   //Exit at the second running of this line;
        }
        delete[] payload;
    }

这段代码有什么问题? 提前致谢。

你说了activeBuffer = new s_payload[...],所以你可以说delete[] activeBuffer。但是,在 activeBuffer 的每个 s_payload 元素中,data 是一个数组,而不是指针。因此,您不需要 delete payload[x].data — 无论何时 delete payload[x]delete[] payloaddata 也会消失。

但是,我建议您重新考虑您的方法,而不是尝试修补现有的方法。您正在推入和弹出固定大小缓冲区的数组——这真的有必要吗?你能不能只压入和弹出 std::strings 或 std::vector<unsigned char>s,而不必担心你的内存管理?例如,std::vector 可以保存任意数量的数据。

让图书馆做尽可能多的工作,这样你就不必做!