*** glibc détecté *** ./un.: double gratuit ou la corruption (out): 0xbfe69600 ***

Je suis en train de faire un programme pour représenter un tableau des "Étudiants". Il a l'attribut 'ID', 'prénom' et 'Nom'. J'ai fait un tableau à deux dimensions et de mettre le cout des déclarations tout au long de vérifier... La bonne info EST stockée dans la cellule appropriée, mais j'obtiens une erreur que je ne reconnais pas.
le code pour le .fichier cpp est:

#include "Table1.h"
#include <sstream>
#include <iostream>
using namespace std;
Table1::Table1(){
RowPos = 1;
ColPos = 0;
for(int i=1; i<16; i++)
{
for(int j=0; j<3 ; j++)
Students[i][j] = "FakeNull"; //fill the array with Null value
}
}
string Table1::InsertStudent(string ID, string FN, string LN){
Students[0][0] = "StudentID";
Students[0][1] = "FirstName";
Students[0][2] = "LastName";
Students[RowPos][ColPos] = ID; //Assign ID to first column
ColPos++; //Move to next column
Students[RowPos][ColPos] = FN;
ColPos++;
Students[RowPos][ColPos] = LN;
ColPos++;
ColPos = 0;
RowPos++;
}
void Table1::Print(string Name){
if(Name == "students"){
for(int i=1; i<16; i++)
{
int j=0;
if(Students[i][j] == "FakeNull")
break;
else
cout<< "("<< Students[i][j]<< ",";
j++;
cout<< Students[i][j]<< ",";
j++;
cout<< Students[i][j]<< ")";
}
}
}

Ma Table1.h est:

#include <iostream>
using namespace std;
#include <string>
#ifndef GRADE_HEADER
#define GRADE_HEADER
class Table1
private:
string Students[16][3];
string Grades[16][3];
int RowPos;
int ColPos;
public:
Table1();
string InsertStudent(string, string, string);
string InsertGrade(string, string, string, string);
void Print(string);
void Select(string, string, int);
void Select(string, string, string);
void Select(string, string, char);
void Join();
string Converter(int);
};
#endif

L'ERREUR est la suivante:

    *** glibc detected *** ./a.out: double free or corruption (out): 0xbfbdeae0 ***
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x75ee2)[0xeadee2]
/usr/lib/i386-linux-gnu/libstdc++.so.6(_ZdlPv+0x1f)[0x9a951f]
/usr/lib/i386-linux-gnu/libstdc++.so.6(_ZNSs4_Rep10_M_destroyERKSaIcE+0x1b)          [0x99099b]
/usr/lib/i386-linux-gnu/libstdc++.so.6(+0x909dc)[0x9909dc]
/usr/lib/i386-linux-gnu/libstdc++.so.6(_ZNSsD1Ev+0x2e)[0x990a4e]
./a.out[0x8049299]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xe514d3]
./a.out[0x8048a71]
======= Memory map: ========
003a0000-003ca000 r-xp 00000000 08:01 150255     /lib/i386-linux-gnu/libm-2.15.so
003ca000-003cb000 r--p 00029000 08:01 150255     /lib/i386-linux-gnu/libm-2.15.so
003cb000-003cc000 rw-p 0002a000 08:01 150255     /lib/i386-linux-gnu/libm-2.15.so
005a5000-005a6000 r-xp 00000000 00:00 0          [vdso]
007c5000-007e5000 r-xp 00000000 08:01 150250     /lib/i386-linux-gnu/ld-2.15.so
007e5000-007e6000 r--p 0001f000 08:01 150250     /lib/i386-linux-gnu/ld-2.15.so
007e6000-007e7000 rw-p 00020000 08:01 150250     /lib/i386-linux-gnu/ld-2.15.so
00900000-009d8000 r-xp 00000000 08:01 393409     /usr/lib/i386-linux gnu/libstdc++.so.6.0.16
009d8000-009d9000 ---p 000d8000 08:01 393409     /usr/lib/i386-linux gnu/libstdc++.so.6.0.16
009d9000-009dd000 r--p 000d8000 08:01 393409     /usr/lib/i386-linux gnu/libstdc++.so.6.0.16
009de000-009e5000 rw-p 00000000 00:00 0
00c13000-00c2f000 r-xp 00000000 08:01 132412     /lib/i386-linux-gnu/libgcc_s.so.1
00c2f000-00c30000 r--p 0001b000 08:01 132412     /lib/i386-linux-gnu/libgcc_s.so.1
00c30000-00c31000 rw-p 0001c000 08:01 132412     /lib/i386-linux-gnu/libgcc_s.so.1
00e38000-00fdc000 r-xp 00000000 08:01 150260     /lib/i386-linux-gnu/libc-2.15.so
00fdc000-00fde000 r--p 001a4000 08:01 150260     /lib/i386-linux-gnu/libc-2.15.so
00fde000-00fdf000 rw-p 001a6000 08:01 150260     /lib/i386-linux-gnu/libc-2.15.so
00fdf000-00fe2000 rw-p 00000000 00:00 0
08048000-0804a000 r-xp 00000000 00:19 52698567   
0804a000-0804b000 r--p 00001000 00:19 52698567   
0804b000-0804c000 rw-p 00002000 00:19 52698567   
09df7000-09e18000 rw-p 00000000 00:00 0          [heap]
b77c9000-b77cc000 rw-p 00000000 00:00 0
b77de000-b77e3000 rw-p 00000000 00:00 0
bfbbe000-bfbdf000 rw-p 00000000 00:00 0          [stack]
Aborted (core dumped)
  • Veuillez inclure la Table1.h (et nettoyer votre mise en forme) -- pour le moment nous ne pouvons pas voir où vous en êtes l'initialisation de votre Élève de tableau (et si il n'est pas initialisé, vous obtiendrez une erreur comme celle que vous l'obtenir)
  • pls fournir la déclaration de la classe
  • comment définissez-vous Students
  • La déclaration complète, la définition et le constructeur de détails sont nécessaires afin de faciliter l'orientation. Le Table1 constructeur ne dispose pas de suffisamment d'informations pour déterminer la façon dont les deux dimensions Students "array" doit être utilisé. Par exemple, est Students STL carte contenant de l'entier de la chaîne de paires clé-valeur?
  • J'ai ajouté de la Table.h section du bas.
  • sur une note de côté: je vous suggère fortement de ne JAMAIS mettre un espace de noms à l'aide de dans un en-tête. Vous pouvez avoir de très bonne cause, de ne pas vouloir les conflits avec les choses dans le std espace de noms. En outre, je voudrais éviter d'avoir <iostream> jamais inclus dans un en-tête comme il est massif et va ralentir le temps de compilation. Si et seulement si vous avez besoin d'accéder à istream et ostream dans un en-tête d'utilisation <iosfwd> à la place.
  • Pouvez-vous poster le reste du code, si c'est pas trop long? Les pièces que vous avez montré jusqu'à présent, regardez sur OK. Le else clause ::l'Impression d'avoir des accolades ajout de la déclaration de groupe - C++ n'est pas l'utilisation de l'indentation de décider comment les instructions sont regroupées - mais cette erreur ne devrait pas être la cause de la corruption de la mémoire.
  • Après avoir saisi l'ensemble du code source et de le placer dans une C++ connaissance de l'éditeur, l'accolade ouvrante est manquant pour class Table1. Je suis d'accord que les accolades pour le reste de la clause en Table1::Print() sont manquants. Il est également fortement recommandé d'avoir seulement un using namespace directive dans un .cpp, jamais un en-tête. Il y aura des collisions d'espace de noms et la portée de la résolution de bugs qui seront très difficiles à résoudre si un fichier d'en-tête contient des directives à l'aide.
  • Le corps principal sera également utile ici. Vous le poster que source de trop? Je dois faire quelques courses, et sera en mesure d'ajouter plus de quelques heures. La réponse ci-dessous devraient vous aider à résoudre les choses et peut-être résoudre le problème.
  • voir Modifier les Trois ci-dessous pour les améliorations suggérées pour résoudre le problème. Affichage main.cpp peut-être pas nécessaire, pas plus.

InformationsquelleAutor user3448739 | 2014-03-22