Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » fehlermeldung bei der exe: an invalid argument was encountered

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
31.05.2005, 04:48 Uhr
~keine ahnung
Gast


hallo ich hab mal wieder ein problem und hoffe das ihr mir wieder weiterhelfen könnt.

ich mache eine datenbankabfrage und bekomme x,y werte zurück die ich in ein array speichere. anschließend möchte ich anhand der y koordinaten lokale minimas erkennen. die ausgabe ist in einer listbox. mein compiler gibt keinen fehler an aber wenn ich die exe ausführe rechnet mein pc erst eine zeitlang und dann bekomme ich den fehler: an invalid argument was encountered.

hier mal mein code:


C++:
int arraysize = pDoc->Chromy->getMaxScan();
double myarray[50000];
double Intens1 = 0;
double Intens2 = 0;
int count = 0;



for (int i = 0; i < arraysize; i++)
{
        Intens1 = pDoc->Chromy->getPoint(i).y;
    Intens2 = pDoc->Chromy->getPoint(i+1).y;

    if (Intens1 < 17000)
    {
            
     if (Intens2 > Intens1)
        {
            myarray[count] = Intens1;      
            count++;
        }
    }
    
    }

  
res.m_pArray = myarray;  
res.m_nArraySize = count;  



hier noch der dazugehörige teil der result klasse:


C++:
BOOL PeakResult::OnInitDialog()
{
    CDialog::OnInitDialog();

    // TODO:  Add extra initialization here


for (int i = 0; i < m_nArraySize; i++)
{
    CString s;
    s.Format("%.3f", m_pArray[i]);  
    m_ctrlListBox.AddString(s);
}




folgendes funktioniert einwandfrei:


C++:
for (int i = 0; i < arraysize; i++)
{
    
    
    Intens1 = pDoc->Chromy->getPoint(i).y;
    
    if (Intens1<17000)
    {
    
        myarray[count] =  Intens1;  
        count++;
    
    }
    
}




bis auf die zweite if bedingung ist das nichts anderes. bin echt ratlos und hoffe das mit einer helfen kann

mfg patrick

Dieser Post wurde am 31.05.2005 um 09:10 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
31.05.2005, 07:45 Uhr
Tommix



'Morgen,
ich überblicke es zwar jetzt nicht, aber möglicherweise muß es, wenn Du

C++:
Intens2 = pDoc->Chromy->getPoint(i+1).y;


verwenden willst, darüber

C++:
for (int i = 0; i < arraysize-1; i++)


heißen.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
31.05.2005, 09:07 Uhr
Disi



Huhu,

also für mich sieht der code hier zweifelhaft aus?!?


C++:
if (Intens1 < 17000)
{
if (Intens2 > Intens1)
{
  myarray[count] = Intens1;
  count++;
}
}




Debug doch mal rein?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
31.05.2005, 09:13 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


was ist wenn arraysize größer als 50000 ist? das fängst du nicht ab. Warum nutzt du nicht CArray<double> anstatt deines festen double-arrays? Ansonsten könnt ich mir vorstellen das folgendes schiefgeht:


C++:
for (int i = 0; i < arraysize; i++)
{
        Intens1 = pDoc->Chromy->getPoint(i).y;
    Intens2 = pDoc->Chromy->getPoint(i+1).y;



Was ist wenn i = arraysize-1 dann liefert dir Intens2 die obige Fehlermeldung, da Element

pDoc->Chromy->getPoint(arraysize) nicht existiert und dadurch auch keinen y-wert hat.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
31.05.2005, 09:53 Uhr
~keine ahnung
Gast


@all vielen dank es geht jetzt. wenn mann die lösung hier liest ist es sooo einfach! klar wenn die schleife bis arraysize zählt gibt es keinen punkt mehr für i+1. die lösung war also:

for (int i = 0; i < arraysize-1; i++)


@floSoft also arraysize ist nicht größer als 50000 allerdings nervt mich das feste array auch tierisch. CArray<double> hab ich so noch nicht gesehen aber meine erfahrung ist auch nicht besonders. kannst du mir da mal bitte ein beispiel geben wie man das einsetzt? ich hatte folgendes probiert:double myarray[arraysize]; da hab ich dann vom compiler immer den fehler bekommen das er einen konstanten ausdruck erwartet.

mfg patrick
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
31.05.2005, 12:10 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


afxtempl.h einbinden, dann

statt


C++:
double myarray[50000];



ein


C++:
CArray<double> myarray;




dann kannst du z.B so schreiben:


C++:
if (Intens2 > Intens1)
{
  myarray.Add(Intens1);
}



Zugriff entweder per


C++:
myarray.GetAt(x)



oder über


C++:
myarray[x]



also hier z.b:


C++:
for (int i = 0; i < myarray.GetCount(); i++)
{
    CString s;
    s.Format("%.3f", myarray.GetAt(i));   // oder auch myarray[i]
    m_ctrlListBox.AddString(s);
}


--
class God : public ChuckNorris { };

Dieser Post wurde am 31.05.2005 um 12:10 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
31.05.2005, 15:31 Uhr
~keine ahnung
Gast


@flosoft danke für das ausführliche beispiel. ich habe jetzt mal die änderrungen gemacht allerdings bekomm ich jetzt an der pointer stelle in die andere klasse
(res.m_pArray = myarray folgenden fehler:
error C2440: '=' : cannot convert from 'CArray<TYPE>' to 'double *'
with
[
TYPE=double
]

ich hab das afxtempl.h in beiden klassen + header included. was kann ich falsch gemacht haben?

mfg patrick
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
31.05.2005, 17:55 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du solltest den m_pArray - Pointer auch auf


C++:
CArray<double> *m_pArray



ändern

und dann natürlich auch


C++:
res.m_pArray = &myarray;



machen
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
01.06.2005, 00:06 Uhr
~keine ahnung
Gast


hoi also das erste hatte ich auch schon versucht aber mit der gleichen fehlermeldung. mit dem zweiten dazu gings dann. ich hab das & schon ein paarmal gesehen und weiß das es was mit pointern zu tun hat aber wirklich verstanden hab ichs nicht. kannst du mir das bitte nochmal genauer erklären was das macht und wie und wann man es einsetzt?

das problem war jetzt das das programm zwar lief aber in meiner listbox standen jetzt nur noch komische sachen drin (lauter nuller und 2-3 zahlen). mit dem festen array stand das drin was drin stehen sollte. irgendwas läuft also wieder mal schief bei mir aber was?

danke schonmal im voraus mfg patrick
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
01.06.2005, 12:20 Uhr
GuenniAtWork



Hi,

Also an sich ganz einfach:


C++:
int* piZahl = NULL;  //Zeiger auf Adresse NULL
int   iZahl = 5;        //Vaiable mit Wert 5

//Da man einen Wert einem Zeiger nicht direkt zuweisen kann, sondern nur Adressen,
//muß man die Adresse der Variabeln an den Zeiger übergeben.
//Das macht man mit den Adressoperator '&'

piZahl = &iZahl;

//Will man jetzt den Wert des Zeigers haben muß man dereferenzieren mit '*'

*piZahl = 10;
iZahl = *piZahl;


--
Gruß GuenniAtWork

Dieser Post wurde am 01.06.2005 um 12:23 Uhr von GuenniAtWork editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: