Login
CStdioFile - bad ptr (Visual C++)
NEW 11.05.06 15:35
Есть два файла. один читается (modeRead), в другой (modeCreate|modeWrite) пишется информация. Вс╦ функционирует одновременно в одном цикле.
После завершения цикла. вызывается метод Close для обоих файлов. Тот файл, который читался, закрывается без ошибок.
Файл в который вс╦ писалось не закрывается.
CXX0030: Error: expression cannot be evaluated char
и -
_tmpfname 0x00000000 <Bad Ptr> char *
для чтения и записи использую функции ReadString() и WriteString()
Как можно решить эту проблему?
После завершения цикла. вызывается метод Close для обоих файлов. Тот файл, который читался, закрывается без ошибок.
Файл в который вс╦ писалось не закрывается.
CXX0030: Error: expression cannot be evaluated char
и -
_tmpfname 0x00000000 <Bad Ptr> char *
для чтения и записи использую функции ReadString() и WriteString()
Как можно решить эту проблему?
NEW 11.05.06 15:55
in Antwort JacksonB 11.05.06 15:35
Странно. Сто раз пользовался, но такого не было.
NEW 11.05.06 15:59
in Antwort Simple 11.05.06 15:55
Я не пользовался ни разу, но выглядит как разименовывание нулевого указателя. 2автор: покажи код.
Dropbox - средство синхронизации и бэкапа файлов.
NEW 11.05.06 16:08
in Antwort Simple 11.05.06 16:02
NEW 11.05.06 16:09
in Antwort voxel3d 11.05.06 15:59
NEW 11.05.06 16:11
in Antwort voxel3d 11.05.06 16:08, Zuletzt geändert 11.05.06 16:12 (Simple)
Я ни разу не пользовался указателями при работе с этим классом. Но черт его знает, что у автора там в коде :) Посмотреть надо.
зы Но обычно, если указатель нулевой, ошибка другая...
зы Но обычно, если указатель нулевой, ошибка другая...
NEW 11.05.06 16:40
in Antwort voxel3d 11.05.06 15:59
ULONGLONG ulPosition,i;
int n;
CString csStr,csStr1,csHelp,csLineNumber;
CStdioFile ifile(csFileName,CFile::modeRead);
csOutfile = pGlobals->m_ggsTargetDir+"\\"+PathFindFileName(csFileName);
if (!PathFileExists(pGlobals->m_ggsTargetDir))
{
csOutfile = pGlobals->m_ggsProjectPath;
if(!csOutfile.IsEmpty())
{
// csOutfile can contain
// - a directory-path
// - a file-path
// -> check it
if(GetFileAttributes(csOutfile) & FILE_ATTRIBUTE_DIRECTORY)
csOutfile += "\\" + csFileName;
else
{
char szPath[_MAX_PATH],
szDrive[_MAX_DRIVE],
szDir[_MAX_DIR],
szFName[_MAX_FNAME],
szExt[_MAX_EXT];
_splitpath(csOutfile, szDrive, szDir, szFName, szExt);
_makepath(szPath, szDrive, szDir, "", "");
csOutfile = szPath;
}
// (2) Set/create default output directory (...\OUTPUT\SRC)
csOutfile += "OUTPUT\\INSTRPRO";
if(!::CreateDirectory(csOutfile, NULL))
{
// directory already exists
}
csOutfile += "\\" + csFileName;
}
else
{
//error message
//pGlobals->Error
return 0;
}
}
CStdioFile ofile(csOutfile,CFile::modeCreate|CFile::modeWrite);
i=n=0;
ulPosition=ifile.Seek(0,ifile.end);
ifile.SeekToBegin();
ifile.ReadString(csStr);
csStr.Trim();
while (i<ulPosition)
{
if (csStr.Left(1)!="#" || csStr.Left(1)=="")
{
do
{
ofile.WriteString(csStr+"\n");
ifile.ReadString(csStr);
csStr.Trim();
i++;
}while (csStr.Left(1)!="#" && i<ulPosition);
}
if (csStr.Left(1)=="#")
{
csHelp="";
n=0;
csHelp=UntilCharacterStr(csStr,' ',n); //check directive "if...",...,"endif"
if (csHelp=="#if" ||
csHelp=="#ifdef" ||
csHelp=="#ifndef" ||
csHelp=="#endif" ||
csHelp=="#error" ||
csHelp=="#elif" ||
csHelp=="#else")
{
char temp=0;
csLineNumber=LineNumber(CString(ltoa(i,&temp,10)),2);
ofile.WriteString(csLineNumber+csStr+"\n");
ifile.ReadString(csStr);
csStr.Trim();
i++;
} //end of check directive "if...",...,"endif"
do
{
ifile.ReadString(csStr1);
csStr1.Trim();
if (csStr1.Right(1)!="\\") break;
i++;
}while (csStr.Left(1)!="#" && (csStr.Left(1)!="/" || csStr.Left(1)!="*" ));
char temp=0;csLineNumber=LineNumber(CString(ltoa(i,&temp,10)),2);
csStr1=CheckStr(csStr);
if (m_bError!=TRUE)ofile.WriteString(csLineNumber+(LPCTSTR)csStr1);
}
ifile.ReadString(csStr);
csStr.Trim();
i++;
}
ifile.Close();
ofile.Close();
if (m_bError==TRUE) ofile.Remove(csOutfile);
int n;
CString csStr,csStr1,csHelp,csLineNumber;
CStdioFile ifile(csFileName,CFile::modeRead);
csOutfile = pGlobals->m_ggsTargetDir+"\\"+PathFindFileName(csFileName);
if (!PathFileExists(pGlobals->m_ggsTargetDir))
{
csOutfile = pGlobals->m_ggsProjectPath;
if(!csOutfile.IsEmpty())
{
// csOutfile can contain
// - a directory-path
// - a file-path
// -> check it
if(GetFileAttributes(csOutfile) & FILE_ATTRIBUTE_DIRECTORY)
csOutfile += "\\" + csFileName;
else
{
char szPath[_MAX_PATH],
szDrive[_MAX_DRIVE],
szDir[_MAX_DIR],
szFName[_MAX_FNAME],
szExt[_MAX_EXT];
_splitpath(csOutfile, szDrive, szDir, szFName, szExt);
_makepath(szPath, szDrive, szDir, "", "");
csOutfile = szPath;
}
// (2) Set/create default output directory (...\OUTPUT\SRC)
csOutfile += "OUTPUT\\INSTRPRO";
if(!::CreateDirectory(csOutfile, NULL))
{
// directory already exists
}
csOutfile += "\\" + csFileName;
}
else
{
//error message
//pGlobals->Error
return 0;
}
}
CStdioFile ofile(csOutfile,CFile::modeCreate|CFile::modeWrite);
i=n=0;
ulPosition=ifile.Seek(0,ifile.end);
ifile.SeekToBegin();
ifile.ReadString(csStr);
csStr.Trim();
while (i<ulPosition)
{
if (csStr.Left(1)!="#" || csStr.Left(1)=="")
{
do
{
ofile.WriteString(csStr+"\n");
ifile.ReadString(csStr);
csStr.Trim();
i++;
}while (csStr.Left(1)!="#" && i<ulPosition);
}
if (csStr.Left(1)=="#")
{
csHelp="";
n=0;
csHelp=UntilCharacterStr(csStr,' ',n); //check directive "if...",...,"endif"
if (csHelp=="#if" ||
csHelp=="#ifdef" ||
csHelp=="#ifndef" ||
csHelp=="#endif" ||
csHelp=="#error" ||
csHelp=="#elif" ||
csHelp=="#else")
{
char temp=0;
csLineNumber=LineNumber(CString(ltoa(i,&temp,10)),2);
ofile.WriteString(csLineNumber+csStr+"\n");
ifile.ReadString(csStr);
csStr.Trim();
i++;
} //end of check directive "if...",...,"endif"
do
{
ifile.ReadString(csStr1);
csStr1.Trim();
if (csStr1.Right(1)!="\\") break;
i++;
}while (csStr.Left(1)!="#" && (csStr.Left(1)!="/" || csStr.Left(1)!="*" ));
char temp=0;csLineNumber=LineNumber(CString(ltoa(i,&temp,10)),2);
csStr1=CheckStr(csStr);
if (m_bError!=TRUE)ofile.WriteString(csLineNumber+(LPCTSTR)csStr1);
}
ifile.ReadString(csStr);
csStr.Trim();
i++;
}
ifile.Close();
ofile.Close();
if (m_bError==TRUE) ofile.Remove(csOutfile);
NEW 11.05.06 17:23
in Antwort JacksonB 11.05.06 16:40
Меня слегка заколдобило от кода, но может оно так и надо, не програмер я. Это известное МФЦ?
Так вот. Судя по всему проблема не закрытии файла. Где-то что-то не того типа стоит. Скорее всего, даже при открытии файла.
---
Лицо фиpмы - это жопа секpетаpши
Так вот. Судя по всему проблема не закрытии файла. Где-то что-то не того типа стоит. Скорее всего, даже при открытии файла.
---
Лицо фиpмы - это жопа секpетаpши
NEW 11.05.06 23:48
in Antwort JacksonB 11.05.06 16:40
Ужас. Уволил бы за такой код. Сразу и навсегда.
NEW 12.05.06 02:40
in Antwort JacksonB 11.05.06 16:40
Первая ошибка - в 6-й строке. Дальше - не осилил... :(
NEW 12.05.06 09:44
in Antwort scorpi_ 11.05.06 23:48
Знаете, вы меня поражаете. Я пишу на с++ только 2 месяца. И вот эти восклицания
>Ужас. Уволил бы за такой код. Сразу и навсегда.
меня обижают. Нельзя так сходу говорить. Если вы такой опытный в программировании, то почему бы не сказать как лучше писать. Вроде бы для этого существует форум, задавать вопросы и получать ответы по возможности, а не простите за выражение "обсирать" тех у кого что-то не получается или кто "ужасно пишет".
>Ужас. Уволил бы за такой код. Сразу и навсегда.
меня обижают. Нельзя так сходу говорить. Если вы такой опытный в программировании, то почему бы не сказать как лучше писать. Вроде бы для этого существует форум, задавать вопросы и получать ответы по возможности, а не простите за выражение "обсирать" тех у кого что-то не получается или кто "ужасно пишет".
12.05.06 09:47
in Antwort JacksonB 12.05.06 09:44
NEW 12.05.06 09:58
in Antwort JacksonB 12.05.06 09:44
Ты не обижайся. Это крик души :) Мне тоже стало нехорошо от такого.
NEW 12.05.06 09:59
in Antwort Simple 12.05.06 09:57
Ну я подумал мало ли, может так принято под МФЦ код писать.
---
Device "Штангенциркyль" not found. (2:5020/481.8)
---
Device "Штангенциркyль" not found. (2:5020/481.8)
NEW 12.05.06 10:11
in Antwort Simple 12.05.06 10:02
Не придираяйся к мелочам. :p И вообще где я что-то сказал про С?
Кстати я в данный момент пишу на ANSI C, но код выглядит вполне прилично.
Кстати я в данный момент пишу на ANSI C, но код выглядит вполне прилично.
12.05.06 10:12
in Antwort Simple 12.05.06 10:01
Ну об этом я догадывался. Я просто хотел узнать не написано ли это в соответствии с MS/MFC coding guidelines. Сказал бы чего едкое по поводу МС ;-)
---
Чем меньше жизненного опыта, тем охотнее им делятся (2:4614/1.25)
---
Чем меньше жизненного опыта, тем охотнее им делятся (2:4614/1.25)