我有一个读取大文件并将它们从某个地方复制到某个地方的代码。
首先,我从网络中获取数据并复制到固定大小的缓冲区,即;
fixed_buffer[100000];
然后,每当数据来自网络时,我都会将来自网络的数据复制到它。来自网络的数据总是小于缓冲区大小;
memcpy(fixed_buffer,network_data_buffer,network_data_size);
比我将其复制到具有更大大小的缓冲区
fixed_buffer_2[200000];
memcpy(fixed_buffer_2,fized_buffer,sizeof_fixed_buffer);
比我将fixed_buffer_2推送到std :: queue,然后另一个线程从队列和进程中将其弹出。
所以代码中几乎没有memcpys。我用检漏仪测试了我的代码,并在阶段中看到了这一点:
std::queue.push(fixed_buffer_2);
std::queue.pop();
存在内存泄漏。我对memcpy操作和推送ot队列感到怀疑。如何避免这种情况。这是什么问题?
我刚刚遇到了类似的问题。我想将数组中的所有元素推入队列。除了编写一个循环将每个元素一个一个地推入队列之外,还有类似于“ std :: queue.push(fixed_buffer_2);”之类的代码,它可以帮助复制数组中的内容,例如fixed_buffer_2,直接进入队列?非常感谢!
Cris