哪位大侠帮忙看下,为什么无法生成记录文件啊?
//---------------------------------------
#include <vcl.h>
#include <stdio.h>
#include <dir.h>
#include <io.h>
#include <fcntl.h>
#pragma hdrstop
#include "log.h"
//---------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->Lines->Add("发生器条码存在,等待匹配。");
WriteFIle("发生器条码存在,等待匹配。",1);
m_strPath = new char[200];
m_strFileName = new char[100];
memset(m_strPath, 0, sizeof(m_strPath));
memset(m_strFileName, 0, sizeof(m_strFileName));
//默认当前目录
char szExePath[MAX_PATH];
GetModuleFileName(NULL, szExePath, MAX_PATH);
*(strrchr(szExePath, '\\')) = '\0';
strcpy(m_strPath, szExePath);
sprintf(m_strFileName, "%s.txt",DateToStr(Now()));
}
//---------------------------------------
void __fastcall TForm1::SetPath(char *strPathName)
{
char *ptr = NULL;
strcpy(m_strPath, strPathName);
ptr = strrchr(m_strPath, '\\');
if(ptr != NULL)
{
*strrchr(m_strPath, '\\') = '\0';
}
}
//---------------------------------------
int __fastcall TForm1::WriteFIle(char *strInfo,int sign)
{
char strPathName[200];
switch(sign)
{
case 1:
sprintf(strPathName, "%s\\normallog\\", m_strPath);
break;
case 2:
sprintf(strPathName, "%s\\warnlog\\", m_strPath);
break;
default:
sprintf(strPathName, "%s\\other\\", m_strPath);
break;
}
_mkdir(strPathName);
strcat(strPathName, m_strFileName);
TStringList *t=new TStringList();
if ( FileExists(strPathName))
t->LoadFromFile(strPathName);
AnsiString str_t ;
str_t.printf("[%s] %s ",Now().FormatString("YYYY-MM-DD HH:MM:SS"),strInfo) ;
t->Add(str_t);
t->SaveToFile(strPathName);
delete t;
return 1;
}
//---------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
delete [] m_strPath;
delete [] m_strFileName;
}
//---------------------------------------
上面的程序报错access violation at address 32658731 in module'CC3260MT.DLL'.Read of address 00000000.
并指向strcat(strPathName, m_strFileName);这行
网上查大概是内存分配的问题,指针没用好。
我是实在不知道怎么改了。求大侠帮忙。谢谢了
[解决办法]
但是还是有问题,因为
m_strPath,m_strFileName没有任何数据你就调用那个函数,最终应该是这样的:
- C/C++ code
m_strPath = new char[200]; m_strFileName = new char[100]; memset(m_strPath, 0, sizeof(m_strPath)); memset(m_strFileName, 0, sizeof(m_strFileName)); Memo1->Lines->Add("发生器条码存在,等待匹配。"); //默认当前目录 char szExePath[MAX_PATH]; GetModuleFileName(NULL, szExePath, MAX_PATH); *(strrchr(szExePath, '\\')) = '\0'; strcpy(m_strPath, szExePath); sprintf(m_strFileName, "%s.txt",DateToStr(Now())); WriteFIle("发生器条码存在,等待匹配。",1);
[解决办法]
呵呵,我也刚看出来,你的
WriteFIle("发生器条码存在,等待匹配。",1);
应该是在所有变量赋值之后