c++程序在删除字符数组时退出
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[] payload
时,data
也会消失。
然而,我建议你重新思考你的方法,而不是试图修补你已有的东西。你正在推送和弹出固定大小的缓冲区数组—这真的有必要吗?您是否可以只push和pop std::string
s或std::vector<unsigned char>
s,而不必担心内存管理?例如,std::vector
可以保存任意数量的数据。
让库做尽可能多的工作,这样你就不必这样做了!
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- C++逗号分隔的输入数组代码过早退出
- C++从函数返回的 2D 数组,错误:以非零状态退出
- 如果退出数组,请从另一侧输入
- 我找不到导致我的数组在运行两次案例并退出后损坏的错误
- for循环在将第一个数字放入数组后退出
- c++当循环在填充数组时没有正确终止时,希望能帮助退出此循环
- 多项式程序中的C++动态数组和指针导致退出错误255
- c++程序在删除字符数组时退出