Je travaille sur un programme de validation d'e-mail pour ma classe cmpsci et je rencontre des problèmes avec cette partie. Ce que je fais est de lire une liste de domaines de premier niveau valides à partir d'un fichier texte dans une classe de vecteur que j'ai écrite moi-même (je dois malheureusement utiliser une classe de vecteur personnalisé). Le problème est que le programme lit et ajoute les premiers domaines au vecteur tous bien et bien, mais se bloque quand il arrive à la ligne "org". Je suis complètement perplexe pourquoi cela fonctionne pour les premiers, puis se bloque. En outre, je dois utiliser une classe de chaînes personnalisée; C'est pourquoi j'ai la fonction bizarre getline (donc j'obtiens l'entrée dans un char * pour mon constructeur String). J'ai essayé d'utiliser la classe de chaînes standard avec cette fonction et elle s'est tout de même écrasée de la même manière afin que je puisse exclure la source du problème étant ma classe de chaînes. L'ensemble du programme est assez important et je ne poste que les parties les plus pertinentes. Faites-moi savoir si plus de code est nécessaire s'il vous plaît. Toute aide serait géniale car je n'ai aucune idée d'où aller à partir d'ici. Merci!C++: Blocage du programme lors de l'ajout d'un objet à la classe de vecteurs personnalisée
La fonction ReadTlds:
void Tld::ReadTlds() {
// Load the TLD's into the vector
validTlds = Vector<String>(0); // Init vector; declaration from header file: "static Vector<String>validTlds;"
ifstream in(TLD_FILE);
while(!in.eof()) {
char tmpInput[MAX_TLD_LENGTH]; // MAX_TLD_LENGTH equals 30
in.getline(tmpInput, MAX_TLD_LENGTH);
validTlds.Add(String(tmpInput)); // Crashes here!
}
}
Ma classe personnalisée vecteur:
#pragma once
#include <sstream>
#define INIT_CAPACITY 100
#define CAPACITY_BOOST 100
template<typename T> class Vector {
public:
// Default constructor
Vector() {
Data=NULL;
size=0;
capacity=INIT_CAPACITY;
}
// Init constructor
Vector(int Capacity) : size(0), capacity(Capacity) {
Data = new T[capacity];
}
// Destructor
~Vector() {
size=0;
Data = NULL;
delete[] Data;
}
// Accessors
int GetSize() const {return size;}
T* GetData() {return Data;}
void SetSize(const int size) {this->size = size;}
// Functions
void Add(const T& newElement) {
Insert(newElement, size);
}
void Insert(const T& newElement, int index) {
// Check if index is in bounds
if((index<0) || (index>capacity)) {
std::stringstream err;
err << "Vector::Insert(): Index " << index << " out of bounds (0-" << capacity-1 << ")";
throw err.str();
}
// Check capacity
if(size>=capacity)
Grow();
// Move all elements right of index to the right
for(int i=size-1; i>=index; i--)
Data[i+1]=Data[i];
// Put the new element at the specified index
Data[index] = newElement;
size++;
}
void Remove(int index) {
// Check if index is in bounds
if((index<0) || (index>capacity-1)) {
std::stringstream err;
err << "Vector::Remove():Index " << index << " out of bounds (0-" << capacity-1 << ")";
throw err.str();
}
// Move all elements right of index to the left
for(int i=index+1; i<size; i++)
Data[i-1]=Data[i];
}
// Index operator
T& operator [] (int index) const {
// Check if index is in bounds
if((index<0) || (index>capacity-1)) {
std::stringstream err;
err << "Vector operator[]:Index " << index << " out of bounds (0-" << capacity-1 << ")";
throw err.str();
}
return Data[index];
}
// Assignment oper
Vector<T>& operator = (const Vector<T>& right) {
Data = new T[right.GetSize()];
for(int i=0; i<right.GetSize(); i++)
Data[i] = right[i];
size = right.GetSize();
return *this;
}
private:
T *Data;
int size; // Current vector size
int capacity; // Max size of vector
void Grow() {
capacity+=CAPACITY_BOOST;
T* newData = new T[capacity];
for(int i=0; i<capacity; i++)
newData[i] = Data[i];
// Dispose old array
Data = NULL;
delete[] Data;
// Assign new array to the old array's variable
Data = newData;
}
};
Le fichier d'entrée:
aero
asia
biz
cat
com
coop
edu
gov
info
int
jobs
mil
mobi
museum
name
net
org <-- crashes when this line is read
pro
tel
travel
L'erreur Visual Studio lancers francs est:
Unhandled exception at 0x5fb04013 (msvcp100d.dll) in Email4.exe: 0xC0000005: Access violation reading location 0xabababbb.
affichez le message d'erreur. cela va aider un peu :) – Stephano
SO n'est pas sur le débogage de votre application pour vous. Prenez des mesures de débogage de base pour réduire la complexité et isoler la panne; Vous allez probablement résoudre le problème vous-même, et si vous ne le faites pas, vous aurez au moins un bloc de code plus facile à gérer. – meagar
Megar, j'ai identifié la ligne exacte sur laquelle le programme se bloque. Il a un commentaire à côté de ci-dessus dans la fonction ReadTlds. J'ai seulement posté le code pertinent. Excusez-moi d'avoir posté toute la classe des vecteurs, mais j'ai l'impression que le problème se situe à l'intérieur, mais je n'ai aucune idée d'où. – Mike