C++ Array Crashed programma

Status
Niet open voor verdere reacties.

Lupo1989

Nieuwe gebruiker
Lid geworden
10 jul 2009
Berichten
3
Ik ben bezig programma aan het schrijven met een eigen datatype maar op 1 of andere reden crashed mijn programma als ik ineens tweede object maak.

ldouble.cpp:
[CPP]#include <iostream>
#include "ldouble.h"

ldouble::ldouble()
{
maxplus = 0;
maxmin = 0;
}
ldouble::~ldouble() { }

void ldouble::CharToLdouble( char* var_number )
{
char Temp;
Length = strlen(var_number);
Middle = PositionChar( var_number, "." );

for( int i = 0; i < Middle; i++)
{
Temp = var_number[Middle - 1 - i];
numplus = atoi(&Temp);
maxplus ++;
}
for( int i = 0; i < Length - Middle - 1; i++)
{
Temp = var_number[Middle + 1 + i];
nummin = atoi(&Temp);
maxmin ++;
}
}

char* ldouble::LdoubleToChar()
{
char* number = ( char* ) malloc ( 4 );
char* Temp = ( char* ) malloc ( 4 );

for( int i = 0; i < Middle; i++)
{
itoa( numplus[maxplus - i - 1] , Temp , 10 );
strcat( number , Temp );
}
strcat( number , "." );

for( int i = 0; i < Length - Middle - 1; i++)
{
itoa( nummin , Temp , 10 );
strcat( number , Temp );
}
return number;
}

int ldouble::PositionChar( char* var_number, char* var_check )
{
int count = -1;

for( int i = 0; i < Length; i++)
{
if(var_number == var_check[0])
{
count = i;
}
}

return count;
}

ldouble ldouble::Plus( ldouble var_Getal_1, ldouble var_Getal_2 )
{

}[/CPP]

ldouble.h:
[CPP]#ifndef LDOUBL_H
#define LDOUBL_H
class ldouble
{
public:
ldouble();
virtual ~ldouble();

void CharToLdouble( char* var_number );
char* LdoubleToChar();

ldouble Plus( ldouble var_Getal_1, ldouble var_Getal_2 );
private:
int numplus[200000];
int maxplus;
int nummin[200000];
int maxmin;

int Length;
int Middle;

int PositionChar( char* var_number, char* var_check );
};
#endif[/CPP]

Main.cpp:
[CPP]#include <iostream>
#include "ldouble.h"

using namespace std;

int main()
{
ldouble Getal_1;
Getal_1.CharToLdouble( "234.567" );

//ldouble Getal_2;
//Getal_2.CharToLdouble( "456.843" );

cout << "Getal 1 = " << Getal_1.LdoubleToChar() << endl;

return 0;
}[/CPP]

Enige idee hoe ik dit probleem kan oplossen?
Heb gemerkt als ik de array 100000 maak dat hij het wel deed.
Maar als ik ineens 3e object dan wilde maken crash hij weer:(

Groet, Lupo
 
Laatst bewerkt:
Bij mij werkt hij gewoon:
Getal 1 = 234.567
Getal 2 = 456.843
Getal 3 = 598.231

Zet anders een paar "cout"jes in de code, dan weet je waar hij ongeveer crasht.
 
Bij mij werkt hij gewoon:


Zet anders een paar "cout"jes in de code, dan weet je waar hij ongeveer crasht.

Hmmm... Welke compiler gebruik je? Iedergeval bij mij crashed het -.-
als ik deze code doe in de main:
[CPP]#include <iostream>
#include "ldouble.h"

using namespace std;

int main()
{
ldouble Getal_1;
Getal_1.CharToLdouble( "234.567" );

cout << "Getal 1 = " << Getal_1.LdoubleToChar() << endl;

return 0;
}[/CPP]
dan doet hij het nog.

Maar als ik deze code doe:
[CPP]#include <iostream>
#include "ldouble.h"

using namespace std;

int main()
{
ldouble Getal_1;
Getal_1.CharToLdouble( "234.567" );

ldouble Getal_2;
Getal_2.CharToLdouble( "456.843" );

cout << "Getal 1 = " << Getal_1.LdoubleToChar() << endl;
cout << "Getal 2 = " << Getal_2.LdoubleToChar() << endl;

return 0;
}[/CPP]
Dan crashed de programma.
Wat ik alleen gemerkt heb is als ik in de ldouble.h dit verander:
[CPP]int numplus[100000];
int maxplus;
int nummin[100000];
int maxmin;
[/CPP]
dan crashed hij niet meer.

Maar als ik dan weer derde object maak zoals dit:
[CPP]#include <iostream>
#include "ldouble.h"

using namespace std;

int main()
{
ldouble Getal_1;
Getal_1.CharToLdouble( "234.567" );

ldouble Getal_2;
Getal_2.CharToLdouble( "456.843" );

ldouble Getal_3;
Getal_3.CharToLdouble( "762.123" );

cout << "Getal 1 = " << Getal_1.LdoubleToChar() << endl;
cout << "Getal 2 = " << Getal_2.LdoubleToChar() << endl;
cout << "Getal 3 = " << Getal_3.LdoubleToChar() << endl;

return 0;
}[/CPP]
Dan crashed hij weer :(

Enig idee hoe ik dit oplos?
 
Laatst bewerkt:
Ik heb even snel gekeken, dus het volgende is misschien niet de oorzaak.
Je declareert
char Temp;
en later doe je
numplus = atoi(&Temp)
Alleen wil atoi() een string die op NUL eindigt.
i.p.v. char Temp;
char Temp[2]={0};
i.p.v Temp =....
Temp[0] =...

EDIT:
De crash komt waarschijnlijk, omdat je teveel geheugen op de stack alloceert. Ervan uitgaande dat een int 4 bytes groot is is een ldouble object al iets groter dan (200.000+200.000)x4=1.600.000 bytes.
Mogelijke oplossingen:
-Alloceer het geheugen van numplus en nummin dynamisch in de constructor.
-Maak de array kleiner (daar was je al achter gekomen).
 
Laatst bewerkt:
Ik heb even snel gekeken, dus het volgende is misschien niet de oorzaak.
Je declareert
char Temp;
en later doe je
numplus = atoi(&Temp)
Alleen wil atoi() een string die op NUL eindigt.
i.p.v. char Temp;
char Temp[2]={0};
i.p.v Temp =....
Temp[0] =...

EDIT:
De crash komt waarschijnlijk, omdat je teveel geheugen op de stack alloceerd. Ervan uitgaande dat een int 4 bytes groot is is een ldouble object al iets groter dan (200.000+200.000)x4=1.600.000 bytes.
Mogelijke oplossingen:
-Alloceer het geheugen van numplus en nummin dynamisch in de constructor.
-Maak de array kleiner (daar was je al achter gekomen).


Bedankt voor de informatie. :thumb: Zal een andere manier moeten vinden om me data op te slaan.

Groet, Lupo
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan