2012-03-08 3 views
-1

push_back에 대한 호출이 실패하는 코드가 있습니다. mdb는 다음과 같은 단서를 제공합니다.벡터에서 push_back이 실패하여 malloc이 추가 메모리를 할당하지 못함

:: 민주 공화국의 malloc +부터 0x49 ~ 의 malloc +부터 0x49 ~ ==의 malloc +부터 0x49 ~ :: 민주 공화국 __1cIallocate4CpnGrnc_JO__6FipTA_3_ + 0x2a ~ __1cIallocate4CpnGrnc_JO__6FipTA_3_ + 0x2a ~ == __type_0 * :: 민주 공화국을 할당 __1cJallocator4CpnGrnc_JO__Iallocate6MI_p1_ + 0x20에 ~ __1cJallocator4CpnGrnc_JO__Iallocate6MI_p1_ +가 0x20 ~ == rnc_JO ** 할당 :: == 무효 벡터를 :: 민주 공화국 __1cGvector4CpnGrnc_JO__Kinsert_aux6Mp1rk1_v_ + 0xac __1cGvector4CpnGrnc_JO__Kinsert_aux6Mp1rk1_v_ + 0xac를 할당 :: insert_aux :: 민주 공화국 __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_ + 0x4e __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_ + 0x4e == 무효 벡터 ::와 push_back :: 민주 공화국 __1cIallocate4CpnGrnc_JO__6FipTA_3_ + 0x2a __1cIallocate4CpnGrnc_JO__6FipTA_3_ + 0x2a == __type_0 * 이 :: 민주 공화국 __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_ + 0x4e __1cGvector4CpnGrnc_JO__Jpush_back6Mrk1_v_ + 0x4e == 무효 벡터 :: push_back`

내가 그나마 할당 이 문제를 어떻게 해결할 수 있습니까? 실제로 벡터 크기보다 큰 할당 된 공간이 있다는 것을 알고 있습니다. 해당 공간을 활용하면 모든 데이터를 다시 할당하고 두 번째 위치로 복사합니다.

벡터 macx_size은 매우 큰 값이며, 너무 많은 값을 삽입하지 않아서 내 코드에서 오류가 발생하지 않아야합니다. 알려 주실 수 있습니까? 내가 왜 디버깅을해야합니까?

+2

'valgrind'또는 다른 도구를 사용하여 메모리 누수 또는 중단을 확인 했습니까? –

+0

"'macx_size'는 매우 큰 값입니다. 너무 많은 값을 삽입하지 않아서 코드에 오류가 발생하지 않아야합니다."max_size의 값은 최소값이 아니라 벡터가 가질 수있는 최대 요소 수입니다. 최소한이어야한다는 것은 그것이 그것을 확실히 지킬 수 있음을 의미합니다. 최대가된다는 것은 확실히 그것들을 유지할 수 없다는 것을 의미합니다. 그 크기에 도달하기 전에 실패 할 수 있습니다. –

+0

코드 란 무엇입니까? – mahmood

답변

1

확인할 방법 중 하나는 응용 프로그램에서 사용중인 메모리와 함께 시스템의 여유 메모리를 모니터링하는 것입니다.

  • 응용 프로그램의 메모리 사용량이 계속 증가하면 메모리 누수가 발생할 가능성이 있습니다.
  • 응용 프로그램 요구 사항보다 적은 여유 메모리가 있으면 리소스 문제가있는 것입니다.
0

이것은 메모리 문제로 보입니다. push_back이 호출되기 전에 목록이 비정상적인 것으로 의심됩니다. 내 제안은이 목록의 작업을 단계적으로 축소하여 어떤 작업으로 인해 목록이 비정상적인 것인지 확인하는 것입니다.

관련 문제