Invalide de pointeur Null - C++
Je suis un invalide de pointeur null erreur à partir de cette section du code. Je devine que c'est quelque chose à voir avec les cordes, mais comme je l'ai récemment appris à leur sujet, je ne trouve pas le problème.
string batchCipherFiles()
{
int count(0);
string text, file;
ifstream inputFile;
cout << " How many files do you wish to encrypt?: ";
cin >> count;
for (int i(1) ; i <= count ; ++i)
{
stringstream ss;
ss << "unencrypted" << i << ".txt";
file = ss.str();
inputFile.open(file.c_str(), ios::in);
if (inputFile.fail())
{
cout << "\n An error has occurred.";
}
else
{
while (!inputFile.eof())
{
getline(inputFile, text);
cout << "\n " << file << " = " << text << "\n\n";
int applyCeasarShift(string,string);
applyCeasarShift(text, file);
}
inputFile.close();
}
}
return (0);
}
Ici est la ligne de débogage à partir de xstring:
#ifdef _DEBUG
_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Debug_message(const wchar_t *message, const wchar_t *file, unsigned int line)
{ //report error and die
if(::_CrtDbgReportW(_CRT_ASSERT, file, line, NULL, message)==1)
{
::_CrtDbgBreak();
}
}
Merci d'avance pour toute aide.
EDIT: L'erreur se produit sur l'instruction de Retour, et dans l'extrait de xstring, la flèche jaune pointe vers "::_CrtDbgBreak();"
EDIT 2:
xstring:
basic_string(const _Elem *_Ptr)
: _Mybase()
{ //construct from [_Ptr, <null>)
_Tidy();
assign(_Ptr);
}
xutility:
template<class _Ty> inline
void _Debug_pointer(const _Ty *_First, _Dbfile_t _File, _Dbline_t _Line)
{ //test iterator for non-singularity, const pointers
if (_First == 0)
_DEBUG_ERROR2("invalid null pointer", _File, _Line);
}
stdthrow:
#ifdef _DEBUG
_CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Debug_message(const wchar_t *message, const wchar_t *file, unsigned int line)
{ //report error and die
if(::_CrtDbgReportW(_CRT_ASSERT, file, line, NULL, message)==1)
{
::_CrtDbgBreak();
}
}
J'espère que c'est le droit des trucs.
- sur la ligne à laquelle se produit l'erreur ?
- montrant le haut de la stacktrace est complètement inutile.. quelle est la ligne d'origine?
- S'il vous plaît montrer l'ensemble de la trace de la pile. Nous avons besoin de savoir ce qui s'appelle
_CrtDbgBreak()
, et ce qui appelle cette fonction, et ainsi de suite. - Les fichiers
unencrypted1.txt
,unencrypted2.txt
, etc. existe sur votre système? Fait disparaître l'erreur si vous indiquez un chemin d'accès complet? - Ces fichiers existent, oui. Je n'ai pas essayé, mais il a besoin de travailler sur plus d'un ordinateur donc je ne sais pas si cela fonctionnerait.
Vous devez vous connecter pour publier un commentaire.
Le problème est que
string
est le type de retour debatchCipherFiles
maisreturn (0);
est retourné: soit changer le type de retour ou de restitution d'unstring
.Je pense que le
return (0);
sera converti implicitement enstd::string((char*)0);
, origine du crash. La documentation pourstd::string
constructeur états:void
. I. e.void batchCipherFiles() { /****/; return; }
Si l'erreur se produit sur l'instruction de retour, il est probable que certains autres code à l'aide de la valeur de retour comme une valeur de type pointeur. Le C++ Standard spécifie qu'un 0 est traité de la même NULLE lorsqu'elle est affectée à un pointeur, donc ce n'est probablement votre problème.
string::string(const char*)