Access violation writing location error.
Witam. Piszę własną pomocniczą bibliotekę do tworzenia logów itp.
i napotkałem kilka problemów mimo że niedawno to wszystko działało...
Access violation writing location, właśnie taki błąd wyskakuje w okienku, mimo że kod kilka minut wcześniej działał.
Przepraszam za tak żenujący opis problemu, ale nie wiem jak go opisać.
"active CXX0030: Error: expression cannot be evaluated" takie coś mam w tym podglądzie (add watch) co to oznacza?
Proszę oto kod, jest dość długi i zdaje się że mało zrozumiały... Aha i błąd występuje na końcu pliku Log.cpp.
main.cpp
#include "Logger.h"
#include "Loader.h"
#include <iostream>
using namespace ml;
using std::cin;
void main()
{
std::cout << "Hello world!\n";
Loader load;
cout << "\nDodawanie adresu";
if( load.adres( "C:/Info.log" ) )
cout << "\nOtworzono!";
cout << "\nPrzypisywanie...";
load.debugMode( "C:/DebugMode.log" );
load.setBreaker( '"' );
cout << "\n\nMa na imię: " << load.strLoad( "name=" ) << endl;
cout << "Lubi: " << load.strLoad( "like=" ) << endl;
cout << "Ma lat: " << load.intLoad( "lat=" ) << endl;
cout << "Nazwisko: " << load.strLoad( "nazwisko=" ) << endl;
cin.get();
}
Log.h
#pragma once
#include <string>
#include <fstream>
using std::string;
using std::fstream;
namespace ml
{
class Log
{
public:
Log( void );
~Log( void );
private:
void addNote( char );
void addNote( string );
void addNote( int );
void addNote( float );
void addNote( double );
bool openFromPath( string );
bool isReady();
void activateLogging( bool );
fstream logfile;
string path;
friend class Logger;
bool endlInfo;
bool numerationOn;
int numerationInfo;
bool active;
};
}
Log.cpp
#include "Log.h"
using namespace ml;
Log::Log()
{
endlInfo = true;
active = true;
numerationOn = false;
numerationInfo = 0;
}
Log::~Log()
{
}
void Log::addNote( char text )
{
if( active )
if( isReady() )
logfile << text;
else
if( openFromPath( path ) )
if( isReady() )
logfile << text;
}
void Log::addNote( string text )
{
if( isReady() )
logfile << text;
else
if( openFromPath( path ) )
if( isReady() )
logfile << text;
}
void Log::addNote( int liczba )
{
if( active )
if( isReady() )
logfile << liczba;
else
if( openFromPath( path ) )
if( isReady() )
logfile << liczba;
}
void Log::addNote( float liczba )
{
if( active )
if( isReady() )
logfile << liczba;
else
if( openFromPath( path ) )
if( isReady() )
logfile << liczba;
}
void Log::addNote( double liczba )
{
if( active )
if( isReady() )
logfile << liczba;
else
if( openFromPath( path ) )
if( isReady() )
logfile << liczba;
}
bool Log::openFromPath( string path )
{
logfile.open( path, std::ios::out );
if( logfile.bad() )
return false;
else
return true;
}
bool Log::isReady()
{
if( logfile.is_open() )
return true;
else
return false;
}
void Log::activateLogging( bool yesNo )
{
active = yesNo;
}
Logger.h
#pragma once
#include "MicroLib.h"
#include "Log.h"
namespace ml
{
class Logger
{
public:
Logger( void );
~Logger( void );
void addKernel( Log & kernel );
bool addPath( string sciezka_do_pliku );
void openKernel( Log * kernel );
Log * issueLog();
Log & adrssueLog();
void add( string );
void add( string, int );
void add( int, string );
void add( int );
void add( string, int, string );
void add( int, string, int );
void add( float );
void add( string, float );
void add( float, string );
void add( float, string, float );
void add( string, float, string );
void add( double );
void add( string, double );
void add( double, string );
void add( double, string, double );
void add( string, double, string );
void addHead( string znak );
void addHead( string znak, int liczba_powtorzen );
void addHead( string znak, int liczba_powtorzen, int liczba_linii );
void prefix( string );
void prefixOn( bool );
void suffix( string );
void suffixOn( bool );
void numerationOn( bool );
void endlOn( bool );
void logActive( bool );
protected:
Log * log;
bool endlineOnInfo;
bool numerationOnInfo;
bool prefixOnInfo;
bool suffixOnInfo;
bool kernelHasLoaded;
string prefixUsed;
string suffixUsed;
private:
void addNumeration();
void addPrefix();
void addSuffix();
void addEndl();
};
}
Loader.h
#include "Logger.h"
#include <string>
#include <fstream>
using namespace std;
namespace ml
{
const string BUG_NOTFIND = "<[BUG_OF_LOAD_NOTFIND]>";
class Loader
{
public:
Loader();
~Loader();
bool adres( string );
bool adres( ifstream & );
string strLoad( string );
int intLoad( string );
long lngLoad( string );
double dubLoad( string );
void setBreaker( char );
void debugMode( string );
void debugMode( Log & );
protected:
ifstream * file;
string * bufor;
char breaker;
private:
Logger log;
string fileAdres;
};
}
Loader.cpp
#include "Loader.h"
using namespace ml;
Loader::Loader()
{
fileAdres.clear();
file = NULL;
file = new ifstream;
log.logActive( false );
log.prefix( "[_MicroLib::LoaderDebugger_]" );
}
Loader::~Loader()
{
}
bool Loader::adres( string adres )
{
file->open( adres );
if( file->is_open() )
{
fileAdres = adres;
return true;
}
else return false;
}
bool Loader::adres( ifstream & file )
{
if( file.is_open() )
{
this->file = & file;
return true;
}
else return false;
}
string Loader::strLoad( string findThis )
{
log.add( "\n\n\nRozpoczynam poszukiwanie: " + findThis );
log.add( "Wczytuję plik..." );
string * buf;
buf = new string;
findThis += breaker;
if( file->is_open() )
{
file->seekg( 0 );
while( !file->eof() )
{
log.add( "Pobieram dane..." );
getline( * file, * buf );
if( * buf == "" && file->eof() )
{
log.add( BUG_NOTFIND );
return BUG_NOTFIND;
}
if( !buf->find( findThis ) )
{
log.add( "Znalezłem w linii: " + * buf );
break;
}
else if( file->eof() )
{
log.add( BUG_NOTFIND );
return BUG_NOTFIND;
}
}
}
string out;
log.add( "Rozpoczynam obróbkę..." );
out.insert( 0, * buf, findThis.size(), buf->size() - findThis.size() - 1 );
log.add( "Wyjście [STR]: " + out );
delete buf;
return out;
}
int Loader::intLoad( string findThis )
{
string * tmp = new string;
* tmp = strLoad( findThis );
log.add( "Kończenie..." );
if( * tmp == BUG_NOTFIND )
{
delete tmp;
return NULL;
}
else
{
log.add( "Wyjście [INT]: ", atoi( tmp->c_str() ) );
return atoi( tmp->c_str() );
}
}
double Loader::dubLoad( string findThis )
{
string * tmp = new string;
* tmp = strLoad( findThis );
log.add( "Kończenie..." );
if( * tmp == BUG_NOTFIND )
{
delete tmp;
return NULL;
}
else
{
log.add( "Wyjście [DOUBLE]: ", atof( tmp->c_str() ) );
return atof( tmp->c_str() );
}
}
long Loader::lngLoad( string findThis )
{
string * tmp = new string;
* tmp = strLoad( findThis );
log.add( "Kończenie..." );
if( * tmp == BUG_NOTFIND )
{
delete tmp;
return NULL;
}
else
{
log.add( "Wyjście [LONG]: ", atol( tmp->c_str() ) );
return atol( tmp->c_str() );
}
}
void Loader::setBreaker( char breaker )
{
this->breaker = breaker;
}
void Loader::debugMode( string path )
{
Log logKernel;
log.addKernel( logKernel );
if( log.addPath( path ) );
log.logActive( true );
}
void Loader::debugMode( Log & logKernel )
{
log.openKernel( & logKernel );
log.logActive( true );
}
Program przestał działać gdy zacząłem pisać activateLogging( bool ); dodałem if( active ) w addNote(...).
Chodzi o to żeby doprowadzić ten kod do stanu żeby nie wyrzucał tego wyjątku... Wszystkie pliki są zapisywane na C:/ Można to zmienić. Za wszelkie odpowiedzi z Waszej strony dziękuję. PS. jak używać wyszukiwarki w Waszym serwisie?