0
Je me demandais si quelqu'un pouvait me dire ce que je fais mal que je reçois ce Unhandled message d'erreur d'exception:argv allocation de mémoire
0xC0000005: Access violation reading location 0x0000000c.
avec un pointage de pointeur vert à mon premier code Prolog (de fid_t):
Voici mon fichier d'en-tête:
class UserTaskProlog
{
public:
UserTaskProlog(ArRobot* r);
~UserTaskProlog();
protected:
int cycles;
char* argv[ 1 ];
term_t tf;
term_t tx;
term_t goal_term;
functor_t goal_functor;
ArRobot* robot;
void logTask();
};
Et voici mon code principal:
UserTaskProlog::UserTaskProlog(ArRobot* r) : robot(r), robotTaskFunc(this, &UserTaskProlog::logTask)
{
cycles = 0;
argv[ 0 ] = "libpl.dll";
argv[ 1 ] = NULL;
PL_initialise(1, argv);
PlCall("consult('myPrologFile.pl')");
robot->addSensorInterpTask("UserTaskProlog", 50, &robotTaskFunc);
}
UserTaskProlog::~UserTaskProlog()
{
robot->remSensorInterpTask(&robotTaskFunc);
}
void UserTaskProlog::logTask()
{
cycles++;
fid_t fid = PL_open_foreign_frame();
tf = PL_new_term_ref();
PL_put_integer(tf, 5);
tx = PL_new_term_ref();
goal_term = PL_new_term_ref();
goal_functor = PL_new_functor(PL_new_atom("factorial"), 2);
PL_cons_functor(goal_term, goal_functor, tf, tx);
int fact;
if (PL_call(goal_term, NULL))
{
PL_get_integer(tx, &fact);
cout << fact << endl;
}
PL_discard_foreign_frame(fid);
}
int main(int argc, char** argv)
{
ArRobot robot;
ArArgumentParser argParser(&argc, argv);
UserTaskProlog talk(&robot);
}
Merci,
Merci Paul. C'était un point valide. Cependant, cela n'a pas résolu la situation. J'ai même commenté argv [0] = "libpl.dll"; en vain. Je reçois toujours le même message d'erreur, qui pointe apparemment vers un problème de pointeur nul ... – Joshua
@Joshua: vous devriez probablement éditer votre question pour qu'elle ait la dernière version du code (avec le problème argv corrigé) –
'argv [1] = NULL;' signifie que argv doit être affecté à au moins deux éléments: 'char * argv [2];' – frayser