cuốn sách gpt4 ai đã làm

Tham nhũng Heap C++

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 02:04:29 29 4
mua khóa gpt4 Nike

Tôi có một hàng đợi đồng bộ đơn giản

 mẫu 

lớpHàng đợi được đồng bộ hóa
{
public:

void Enqueue(const T& data)
{
boost::unique_lock lock(queueMutex);
dataQueue.push(dữ liệu);
conditionVariable.notify_one();
}

TDequeue()
{
boost::unique_lock lock(queueMutex);

trong khi (dataQueue.size()==0)
{
conditionVariable.wait(lock);
}

T result=dataQueue.front();
return result;
}


private:

std::queue dataQueue; // Sử dụng hàng đợi STL để lưu trữ dữ liệu
boost::mutex queueMutex // Mutex để đồng bộ hóa
boost::condition_variable conditionVariable; // Điều kiện cần chờ
};

Khi tôi loại bỏ hàng đợi khỏi hàng đợi, đôi khi nó làm hỏng đống....

HEAP: Khối Heap miễn phí ccb1080 được sửa đổi tại ccb13c0 sau khi được giải phóng

Ngăn xếp cuộc gọi là:

ntdll.dll!76fa5654()    
[Các khung bên dưới có thể không chính xác và/hoặc bị thiếu, không có ký hiệu nào được tải cho ntdll.dll]
ntdll.dll!76f6a554()
ntdll.dll!76f35a70()
ntdll.dll!76fa5eff()
ntdll.dll!76f6a3ba()
ntdll.dll!76f35a70()
msvcr90d.dll!_heap_alloc_base(unsigned int size=1222) Dòng 105 + 0x28 byte C
msvcr90d.dll!_heap_alloc_dbg_impl(unsigned int nSize=1186, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0, int * errno_tmp=0x1310ee18) Dòng 427 + 0x9 byte C++
msvcr90d.dll!_nh_malloc_dbg_impl(unsigned int nSize=1186, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0, int * errno_tmp=0x1310ee18) Dòng 239 + 0x19 byte C++
msvcr90d.dll!_nh_malloc_dbg(unsigned int nSize=1186, int nhFlag=0, int nBlockUse=1, const char * szFileName=0x00000000, int nLine=0) Dòng 296 + 0x1d byte C++
msvcr90d.dll!malloc(unsigned int nSize=1186) Dòng 56 + 0x15 byte C++
msvcr90d.dll!operator new(unsigned int size=1186) Dòng 59 + 0x9 byte C++
x.ax!std::_Allocate(unsigned int _Count=1186, unsigned char * __formal=0x00000000) Dòng 43 + 0x9 byte C++
ax.ax!std::allocator::allocate(unsigned int _Count=1186) Dòng 145 + 0xb byte C++
ax.ax!std::vector >::_Buy(unsigned int _Capacity=1186) Dòng 1110 + 0xf byte C++
ax.ax!std::vector >::vector >(const std::vector > & _Right=[1186](83 'S',50 '2',54 '6',67 'C',162 '¢',4 '',0,0,108 'l',0,0,0,2 '',64 '@',0,0,6 '',14 ' ',64 '@',0,35 '#',2 '',147 '"',76 'L',114 'r',53 '5',0,0,54 '6',79 'O',78 'N',4 '',0,0,0,0,54 '6',79 'O',78 'N',4 '',0,0,0,0,255 'ÿ' ,255 'ÿ',255 'ÿ',255 'ÿ',255 'ÿ',255 'ÿ',255 'ÿ',255 'ÿ',106 'j',4 '',0,0,0,0,0,1 '',65 'A',154 'š',3 '',1 '',176 '°', 159 'Ÿ',255 'ÿ',240 'ğ',199 'Ç',...)) Dòng 501 + 0x11 byte C++
ax.ax!SynchronisedQueue<> > >::Dequeue() Dòng 32 + 0xc byte C++
ax.ax!PPin::FillBuffer(IMediaSample * pSample=0x0cadbea8) Dòng 225 + 0x12 byte C++
ax.ax!PPin::DoBufferProcessingLoop() Dòng 300 + 0x13 byte C++
ax.ax!CSourceStream::ThreadProc() + 0x13e byte
ax.ax!CAMThread::InitialThreadProc() + 0x51 byte
kernel32.dll!753bed6c()
ntdll.dll!76f4377b()
ntdll.dll!76f4374e()

Điều gì có thể gây ra lỗi heap này? Làm cách nào để gỡ lỗi lỗi heap?

gia hạn:Ví dụ sử dụng

// xếp hàng
void GetVideoStreams(BYTE *pData)
{
std::vector vecFrame(pData, pData + nLen/sizeof(pData[0]));
IncomingFramesQueue.Enqueue(vecFrame);

}

//Dequeue
void ConsumeVideoStreams()
{

dữ liệu vector = IncomingFramesQueue.Dequeue();

}

câu trả lời hay nhất

Như đã đề cập ở trên - mã của bạn và dấu vết ngăn xếp bạn đã đăng hiển thị một số phân bổ bộ nhớ đang diễn ra. Cùng với thông báo lỗi, tôi cho rằng lỗi heap xảy ra ở nơi khác và xuất hiện mọi lúc trong hàng đợi vì nó sử dụng nhiều bộ nhớ để sao chép các vectơ này.

Sử dụng phiên bản đánh giá của một số công cụ phân tích bộ nhớ (ví dụ: http://www.softwareverify.com/cpp-memory.php ) để tìm lỗi. Có một số công cụ miễn phí trên thị trường (đáng chú ý nhất là Valgrind), nhưng tôi không biết bất kỳ công cụ miễn phí nào tốt cho Visual C++.

Ngoài ra, bạn có thể xem bài viết nàyLàm thế nào để gỡ lỗi lỗi tham nhũng đống?Các phương pháp bổ sung về cách giải quyết lỗi này được cung cấp tại đây.

Theo như tôi thấy cho đến nay, lỗi không nằm ở mã bạn đã đăng. Nếu bạn cần thêm trợ giúp, vui lòng cung cấp một ví dụ nhỏ độc lập có lỗi.


Tôi vừa tìm thấy một công cụ miễn phí có thể đáng để thử:Tiến sĩ Trí nhớ .Tôi đến từ ngăn xếp Tất nhiên là có liên kết.

Về lỗi heap trong C++, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/11966489/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress