【问题标题】:C++ program Exits when deletes an char arrayC++ 程序在删除 char 数组时退出
【发布时间】:2016-10-20 17:21:47
【问题描述】:

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

在第二个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;
    }

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

【问题讨论】:

标签: c++ memory-management dynamic-allocation


【解决方案1】:

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

但是,我建议您重新考虑您的方法,而不是尝试修补您拥有的东西。您正在推送和弹出固定大小的缓冲区数组——这真的有必要吗?您可以直接推送std::strings 或std::vector&lt;unsigned char&gt;s,而不必担心内存管理吗?例如,std::vector 可以保存任意数量的数据。

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

【讨论】:

    猜你喜欢
    • 2021-06-30
    • 2018-04-07
    • 2018-05-14
    • 1970-01-01
    • 2022-10-13
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多