2011-03-20 6 views
0

Aujourd'hui c'est la première fois que j'utilise C++ depuis un moment. Je suis normalement un programmeur python. Je continue d'obtenir des erreurs de segmentation et je l'ai isolé dans les lignes commentées. (. Ceux qui sont commentés segfaults cause quand décommenté)J'ai des erreurs de segment!

#include <iostream> 
#include <fstream> 
#include <string> 
using namespace std; 
#include "defaultfile.h" 

int main() 
{ 
    ifstream mapin; 
    string map; 
    string s; 
    int i = 0; 
    while (i<=22){i++;top[i][0]="__";i++;};i=0; 
    while (i<=21){i++;frw[i][0]="/";i++;};i=0; 
    while (i<=21){i++;bck[i][0]="\\";i++;};i=0; 
    //while (i<=45){i++;spc[i][0]=" ";i++;};i=0; 
    //while (i<=112){i++;spc[i][1]="n";i++;};i=0; 
    while (i<=22){i++;cout<<top[i][1]<<endl;i++;};i=0; 
    while (i<=21){i++;cout<<frw[i][1]<<endl;i++;};i=0; 
    while (i<=21){i++;cout<<bck[i][1]<<endl;i++;};i=0; 
    //while (i<=45){i++;cout<<spc[i][1]<<endl;i++;};i=0; 
    ... 
} 

l'en-tête est:

string top[23][3] = 
{{"", "", ""}, 
... 
{"", "", ""}}; 
string frw[22][3] = 
{{"", "", ""}, 
... 
{"", "", ""}}; 
string bck[22][3] = 
{{"", "", ""}, 
... 
{"", "", ""}}; 
string spc[46][3] = 
{{"", "", ""}, 
... 
{"", "", ""}}; 

Edit: Merci. C'est toujours les choses stupides qui me manquent et passent une heure à essayer de trouver. Tout ce dont j'avais besoin, c'était quelqu'un d'autre pour le signaler.

+2

L'en-tête est sale – Daniel

+0

Pourquoi initialisez-vous les chaînes comme ça? – quasiverse

+4

Conseil hors sujet: Les espaces et les sauts de ligne sont vos amis! –

Répondre

0
//while (i<=112){i++;spc[i][1]="n";i++;};i=0; 

Cela va segfault sur spc[46] à coup sûr.

1

Vous indexez spc jusqu'à 112, mais seulement 0-45 sont valides pour le premier index.

2
while (i<=112){i++;spc[i][1]="n";i++;};i=0; 

Vous avez défini comme spc:

string spc[46][3] 
1

Les tableaux sont 0 en fonction. Vous écrivez à la fin sur chacun d'eux. Il s'est écrasé sur spc parce que c'est le dernier. Sur les autres vous écrivez dans la mémoire du suivant.

Pour clarifier: Vous faites while (i <= 45) { i++; spc[i] ... Maintenant, si i est 45 alors vous l'incrémentez à 46 et vous accédez à spc[46] qui est en dehors des limites. Pareil pour toutes les autres lignes.

De plus, vous n'initialisez qu'un champ sur deux - vous n'êtes pas sûr si cela est intentionnel.

+0

Bonne prise en incrémentant 'i' avant de l'utiliser, et en fait deux fois par boucle. (D'un autre côté, cela signifie également que 'i == 45' dans la condition de la boucle est impossible, cependant' top [23] 'sera utilisé par erreur) –

Questions connexes