View Single Post
Posts: 3,328 | Thanked: 4,476 times | Joined on May 2011 @ Poland
#1
Hi
In my program ****tion main() is

Code:
int main() 
{
    clear;
    cout << "MarBattery v.1.0" << endl << "This software is distributed under GNU GPL v3 terms. Use it on your own risk." << endl << endl; // left one line :)
cout << "getinfo";
    getinfo(batraw);
cout << "after";
    return 0;
}

While running the program I get

Code:
MarBattery v.1.0
This software is distributed under GNU GPL v3 terms. Use it on your own risk.

Segmentation fault
getinfo()

Code:
unsigned char getinfo(battery_state_raw batvar_raw, bool closefile = true)
{
cout << "opening";
    if (datadump.is_open() == false) datadump.open(datadumppath.c_str(), ios::in);
cout << 's';
    system( datadumpcmd.c_str() ); //this stupid function need `const char*`
cout << "ed_r";
    extractdata_raw();
cout << "ed";
    extractdata(); //get only needed ones
    bat.showdata(); //show it
    if ( closefile == true ) datadump.close(); //if needed
}
extractdata_raw()

Code:
#define trashit() getline(datadump, *trash) // I couldn't make a function and don't wanna write it over and over ;)
#define getit(a) getline(datadump, batraw.a)
void extractdata_raw()
{
cout << "extractdata_raw";
    string* trash = new string; // próbowałem też string* trash = NULL;
    trashit(); trashit(); //lines 1, 2 
    getit(capacity_bars); //line 3
    getit(capacity_bars_full); //line 4
    //....
    trashit(); trashit(); trashit(); //line 16, 17, 18
    getit(voltage_now); //line 17
    getit(voltage_design); // line 18
    //T(h)rash it all!! :D
    delete [] trash;
cout << "deleting";
}

extractdata()

Code:
#define rawatof(data) bat.data=atof(tmpraw.data.c_str()) // I'm too lazy to write it so many times ;D
#define extractme(info) tmpraw.info=batraw.info
#define br batraw
#define vn voltage_now
#define vd voltage_design
void extractdata()
{
    battery_state_raw tmpraw;
    extractme(capacity_bars)[34];
    rawatof(capacity_bars);
//....
    extractme(voltage_now)[29] + br.vn[30] + br.vn[31] + br.vn[32];
    rawatof(voltage_now);
    extractme(voltage_design)[28] + br.vd[29] + br.vd[30] + br.vd[31];
    rawatof(voltage_design);
}

class battery_state

Code:
class battery_state
{
public:
    friend void extractdata();
    inline bool isPresent();
    battery_state() : voltage_now(0), voltage_design(0), percentage(0), capacity_full(0), capacity_now(0) ,capacity_bars(0), capacity_bars_full(0)  {} // zero-it, the stupid compiler doesn't allow me to make it auto-variable
    unsigned char showdata();
private:
//dane składowe

in battery_state_raw

Code:
public:
    friend void extractdata_raw();
    friend void extractdata();
the rest are battery_state data but as strings

what can i do?
thanks for all