2016-12-04 2 views
1

Cela a été compilé sur 64 bits VS C++ 2015 std :: bad_alloc se produit où x est spécifiquement 1120.push_back() sur grand vecteur provoque std :: bad_alloc

static std::vector<std::vector<std::vector<double>>> g_damagefunction; 
static std::vector<std::vector<double>> g_has_damagefunction; 
static std::vector<double> null_v_double; 
static std::vector<bool> null_v_bool; 
static std::vector<std::vector<double>> null_vv_double; 
int main(){ 
for (int x = 0; x < 4400; x++) { 
    std::cout << x << '\n'; 
    g_damagefunction.push_back(null_vv_double); 
    g_has_damagefunction.push_back(null_v_bool); 

    for (int y = 0; y < 2000; y++) { 
     g_damagefunction[x].push_back(null_v_double); 
     g_has_damagefunction[x].push_back(false); 
     for (int i = 0; i < 41; i++) { 
      g_damagefunction[x][y].push_back(0.0); 
     } 
    } 
} 
} 
+0

Je pense qu'il est utilisé trop de mémoire. Vous devriez être capable de voir combien de mémoire est utilisée lorsqu'elle a atteint le point d'impact. –

+1

[Pas de repro] (http://coliru.stacked-crooked.com/a/fafd1d273a5f4e1f) –

+0

@ πάνταῥεῖ il se termine à 10 h 40. J'ai été expiré quand je l'ai essayé sur coliru. –

Répondre

0

bad_alloc ici signifie que vous êtes à court de la mémoire. La taille des éléments doubles dans le vecteur g_damagefunction prendra (4400 x 2000 x 41 x sizeof (double)) octets ce qui équivaut à environ 2,68 Go de votre mémoire. Si vous y ajoutez la quantité de mémoire que les vecteurs occupent eux-mêmes, vous pouvez voir clairement que la RAM de votre ordinateur est insuffisante pour les besoins de votre programme, ou que votre programme utilise trop de mémoire. Je soupçonne que ce soit le cas.