MALLOC가 추가 메모리를 할당하지 못하는 벡터에서 푸시 _ 백이 실패합니다.
-
09-12-2019 - |
문제
push_back
호출이 나를 위해 실패하는 코드가 있습니다. MDB는 나에게 다음과 같은 단서를줍니다.
:: dem malloc + 0x49 ~ malloc + 0x49 ~== malloc + 0x49 ~ :: DEM __1ciallocate4cpngrnc_jo__6fipta_3_ + 0x2a ~ __1ciallocate4cpngrnc_jo__6fipta_3_ + 0x2a ~== __type_0 * 할당 :: DEM __1cjallocator4cpngrnc_jo__iallocate6mi_p1_ + 0x20 ~ __1cjallocator4cpngrnc_jo__iallocate6mi_p1_ + 0x20 ~== rnc_jo ** 할당 자 :: 할당 :: DEM __1cgVector4cpngrnc_jo__kinsert_aux6mp1rk1_v_ + 0xac. __1cgVector4cpngrnc_jo__kinsert_aux6mp1rk1_v_ + 0xac== void 벡터 :: insert_aux. :: dem __1cgvector4cpngrnc_jo__jpush_back6mrk1_v_ + 0x4e. __1cgvector4cpngrnc_jo__jpush_back6mrk1_v_ + 0x4e== void 벡터 :: push_back. :: DEM __1ciallocate4cpngrnc_jo__6fipta_3_ + 0x2a. __1ciallocate4cpngrnc_jo__6fipta_3_ + 0x2a== __type_0 * 할당 :: dem __1cgvector4cpngrnc_jo__jpush_back6mrk1_v_ + 0x4e. __1cgVector4cpngrnc_jo__jpush_back6mrk1_v_ + 0x4e== void 벡터 :: push_back`
어떻게 이것을 수정할 수 있습니까? 실제로 벡터 크기보다 큰 할당 된 공간이 있음을 알고있는 것. 해당 공간을 사용하는 경우 모든 데이터를 두 번째 위치로 재 할당하고 복사합니다.
벡터
macx_size
가 매우 큰 값이며 많은 값을 삽입하지 않는 것처럼이 코드가 실패해서는 안됩니다. 내가 무슨 소리를 내는지 알려주시겠습니까?
해결책
확인을하는 한 가지 방법은 응용 프로그램이 사용하는 메모리와 함께 시스템의 자유 메모리를 모니터링하는 것입니다.
- 응용 프로그램의 메모리 사용이 계속 증가하면 메모리 누수가있을 것입니다.
- 응용 프로그램 요구 사항보다 더 적은 메모리가 적 으면 자원 문제가 있습니다.
다른 팁
이것은 메모리 문제가있는 것으로 보인다. 나는 푸시 _ 백이 불려지기 전에 목록이 비정상적이라는 것을 의심한다. 내 제안은이 목록에서 작업을 단계별로 줄이는 것입니다.