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[] payload
,data
也会消失。
但是,我建议您重新考虑您的方法,而不是尝试修补现有的方法。您正在推入和弹出固定大小缓冲区的数组——这真的有必要吗?你能不能只压入和弹出 std::string
s 或 std::vector<unsigned char>
s,而不必担心你的内存管理?例如,std::vector
可以保存任意数量的数据。
让图书馆做尽可能多的工作,这样你就不必做!
删除数组元素时出现问题。 您可以在下面看到我的一些代码。
在第二个 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
也会消失。
但是,我建议您重新考虑您的方法,而不是尝试修补现有的方法。您正在推入和弹出固定大小缓冲区的数组——这真的有必要吗?你能不能只压入和弹出 std::string
s 或 std::vector<unsigned char>
s,而不必担心你的内存管理?例如,std::vector
可以保存任意数量的数据。
让图书馆做尽可能多的工作,这样你就不必做!