2015-10-28 1 views
0

Je déclare le tableau dynamiquement en utilisant new. Le tableau est formé de la longueur de la chaîne, que je donne de l'utilisateur. Quand je fournis une chaîne de longueur entre 7-11 le tableau est l'impression de la valeur de la poubelle. Pourquoi cela se passe-t-il?valeur de vidage lors de l'impression du tableau

#include<iostream> 
#include<algorithm> 
#include<cstring> 
#include<string> 
#include<climits> 
#include<vector> 
#include<ctime> 
#include<map> 
using namespace std; 

int main(){ 
    string str; 
    cin>>str; 
    int i,j; 
    int** arr = new int*[str.length()]; 
    for(i = 0; i < str.length(); ++i) 
     arr[i] = new int[str.length()]; 

    for(i=0;i<str.length();i++){ 
     for(j=0;j<str.length();j++){ 
      cout<<arr[i][j]<<" "; 
     } 
     cout<<endl; 
    } 
    return 0; 
} 

La sortie de chaîne "BBABCBCAB" est:

36397056 0 8 0 -1 0 1111573058 1094926915 0 
0 0 4 0 -1 0 1111573058 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 

Pourquoi cela se produit? Et pas pour d'autres chaînes avec plus de 12 longueurs?

+0

"Imprime les déchets". Avez-vous attendu des roses? –

Répondre

5

Vous initialisez par défaut tous vos int s, ce qui ne leur attribue pas de valeur. La lecture d'une valeur indéterminée est un comportement indéfini - parfois vous obtenez 0, parfois vous obtenez des valeurs étranges. Le comportement indéfini est indéfini.

Si vous voulez que tous les 0s, vous devez valeur initialiser le tableau:

arr[i] = new int[str.length()](); 
//       ^^ 

Ou utiliser quelque chose comme memset ou std::fill ou std::fill_n.

+0

Merci, je vais utiliser memset à partir de maintenant. –

+0

Non, je reçois toujours une erreur. Chaque fois que j'utilise cin >> str, cela indique une erreur. http://ideone.com/kSIQkA –

+0

@Uchiha_itachi Vous n'obtenez pas une "erreur" - vous obtenez un comportement qui diffère de ce que vous voulez. Votre problème est que vous n'avez pas lu la documentation de 'memset'. – Barry