Usando: MSVS2012C++: accedere al percorso di scrittura violazione
Codice
elemalg.h
#include <vector>
#include <string>
#include <fstream>
class ElemAlg
{
private:
std::string difficultlyLevel, question, answerToRead;
std::vector<std::string> questions, answers;
std::vector<std::string> GetQuiz(int);
};
elemalg.cpp
#include "elemalg.h"
std::vector<std::string> ElemAlg::GetQuiz(int difficulty)
{
if (difficulty == 1) { difficultyLevel = "algE"; }
if (difficulty == 2) { difficultyLevel = "algM"; }
if (difficulty == 3) { difficultyLevel = "algH"; }
if (difficulty == 4) { difficultyLevel = "algVH"; }
std::ifstream fin(difficultyLevel + ".txt");
while (std::getline(fin, question)) { questions.push_back(question); }
fin.close();
std::ifstream fin2(difficultyLevel + "Answers.txt");
while (std::getline(fin2, answerToRead)) { answers.push_back(answerToRead); }
fin2.close();
return questions;
}
MathTutor.cpp
#includes etc
ElemAlg *ea;
ea->GetQuiz(1);
GetQuiz
è sicuramente passato un numero intero compreso tra 1 e 4, questo viene verificata prima che il metodo è chiamato
difficultyLevel
è una stringa definita nel file di intestazione.
Il compilatore genera un'eccezione Non gestita e Posizione di scrittura violazione di accesso ... non appena raggiunge la prima funzione if
.
Se rimuovo le funzioni if
e definisco difficultyLevel
come algE solo per testare lo stesso problema.
Se rimuovo difficultyLevel
del tutto e basta aprire il file come "algE.txt"
e "algEAnswers"
tanto ottengo lo stesso problema, ma in una posizione di memoria diversa una volta che il codice colpisce il ciclo while.
Qual è 'difficultyLevel' esattamente? –
Il parametro deve essere verificato all'interno della funzione con un assert e non all'esterno. Se le domande sono una variabile globale, non so perché provi a restituirla. –
[MCVE] (http://stackoverflow.com/help/mcve) o non è successo. – Angew