2013-05-29 1 views
0
./product -rows 4 -cols 4 

Je reçois cette erreur:Aborted (core sous-évaluées)

terminate called after throwing an instance of 'std::bad_alloc' 
    what(): std::bad_alloc 
Abort (core dumped) 

Et voici mon code ..

#include <iostream> 
#include <stdlib.h> 

using namespace std; 


int **create_array(int rows, int cols){ 
    int x, y; 
    int **array = new int *[rows]; 
    for(int i = 0; i < cols; i++){ 
     array[i] = new int[cols]; 
    } 
    array[x][y] = 1+rand()%100; 
    cout << array << endl; 
    return array; 
} 
int main(int argc, char *argv[]){ 
    int rows, cols; 
    int **my_array = create_array(rows, cols); 

    return 0; 
} 

Répondre

1

Je ne vois pas où vous initialisez les variables rows et cols dans main.

Une fois que vous corrigez cela, x et y à l'intérieur create_array sont affectés par le même problème. Si l'objet est de remplir le tableau avec des valeurs pseudo-aléatoires, vous n'avez pas besoin de x puisque i marche déjà dans votre tableau 2D (dont la représentation basée sur le vecteur de pointeurs est connue sous le nom de Iliffe vector, soit dit en passant). Vous avez juste besoin d'introduire j qui défile à travers chaque rangée du tableau. Ce j serait étagé dans une boucle qui est imbriqué dans la boucle existante:

for(int i = 0; i < rows; i++){ 
    array[i] = new int[cols];  // allocate row 
    for (int j = 0; i < cols; j++) // loop over it and fill it 
    array[i][j] = 1 + rand()%100; 
} 

Il y a un autre problème dans ce que votre boucle majeure, qui devrait allouerons lignes du tableau, est mise en boucle i de 0 à i < cols. Cela devrait être i < rows. Dans la boucle, vous allouez une ligne dont la taille est [cols], ce qui est correct. Dans mon coupé ci-dessus, j'ai fait la correction, si vous regardez de près.

Questions connexes