Naruszenie zasad dostępu podczas wstawiania elementu do mapy globalnej
Próbowałem debugować to od wielu godzin bez powodzenia. Wiem, że rozwiążecie ten problem w ciągu kilku minut, więc oto sytuacja:
Mam ~ 400 plików .cpp / .h o nazwie ProblemX.cpp / ProblemX.h (gdzie X to liczba od 1 do 400). Każdy plik zawiera rozwiązanie problemu związanego z matematyką. Chciałbym, aby problemy rejestrowały się w czasie kompilacji na mapie globalnej z unikalnym kluczem (po prostu działa int) i ma wartość będącą wskaźnikiem do funkcji, która uruchamia rozwiązanie problemu matematycznego.
Mapa globalna jest tworzona i obsługiwana w plikach o nazwie Problem.h / Problem.cpp. Otrzymuję jednak „0x00000004 lokalizacja odczytu naruszenia zasad dostępu”, gdy pierwszy problem próbuje zarejestrować się na mapie. Kod jest następujący:
W plikach ProblemX.h (problem1 uruchamia rozwiązanie tego problemu):
#ifndef PROBLEM1_H
#define PROBLEM1_H
#include "Problems.h"
#include <string>
std::string problem1();
static int rc1 = registerProblem(1, problem1);
#endif
W pliku Problems.h (problemFinder jest funkcją, która używa mapy globalnej do wywołania odpowiedniego wskaźnika funkcji):
#ifndef PROBLEMS_H
#define PROBLEMS_H
#include <string>
int registerProblem(int problemNum, std::string (*problemFunc)(void));
std::string problemFinder(int problemNum);
#endif
W Problems.cpp:
#include "Problems.h"
#include <iostream>
#include <map>
using namespace std;
map<int,std::string (*)(void)> problems_map;
int registerProblem(int problemNum, string (*problemFunc)(void)) {
int rc = 0;
problems_map[problemNum] = problemFunc;
return rc;
}
string problemFinder(int problemNum) {
string retStr = "";
retStr = problems_map[problemNum]();
return retStr;
}
Naruszenie dostępu występuje, gdy „problems_map [problemNum] = problemFunc;”.
Dzięki!