vebbiii Skrevet 25. august 2010 Del Skrevet 25. august 2010 (endret) Hei, jeg holder på å lære meg c++. Fra før av kan jeg noe java. På en helt basic kode her får jeg kompilert uten feil, men jeg får "Segmentation fault" i terminalvinduet. Poenget med koden er å regne ut (a+b)² og (a-b)² fra en tabell. Noen som vet hva som kan være galt? Kode: #include <iostream> #include <cstdlib> using namespace std; int main() { int a,b, antallPar; int tabell[antallPar][2]; cout << "Skriv inn antall par: "; cin >> antallPar; for(int i = 0; i < antallPar; i++){ cout << "Verdi på a: "; cin >> a; cout << "Verdi på b: "; cin >> b; tabell[0] = a; tabell[1] = b; } cout << "a %/t b %/t (a + b)(a + b) %/t (a - b)(a - b)" << endl; for(int j = 0; j < antallPar; j++){ a = tabell[j][0]; b = tabell[j][1]; int sum1 = a * a + 2*(a + b) + b*b; int sum2 = a * a - 2*(a + b) + b*b; cout << a << "%/t" << b << "%/t" << sum1 << "%/t" << sum2 << endl; } return 0; } Endret 25. august 2010 av therealvebbi Lenke til kommentar
Dead_Rabbit Skrevet 26. august 2010 Del Skrevet 26. august 2010 Du bruker variabelen antallPar før du har initialisert den til en fornuftig verdi. Dvs. når du lager et array og bruker antallPar for å bestemme størrelsen, vil den ha en udefinert verdi. Dette skaper garantert et helvete av dimensjoner. (Nå har jeg bare sett veldig raskt over, mulig det er andre ting også som lager faenskap.) Lenke til kommentar
vebbiii Skrevet 26. august 2010 Forfatter Del Skrevet 26. august 2010 Ah, takk. Jeg initialiserte antallPar til 0, og da funket det Lenke til kommentar
zotbar1234 Skrevet 26. august 2010 Del Skrevet 26. august 2010 (endret) Ah, takk. Jeg initialiserte antallPar til 0, og da funket det Jeg tviler på det. Dersom du initialiserer antallPar (digresjon: for guds skyld, bli kvitt uvanen med å skrive koden på norsk) til 0, hva er da størrelsen på tabell? Og når den størrelsen først er satt, går det ikke an å "utvide" tabell dynamisk etter det igjen. Med mindre brukeren skriver faktisk 0 for antallPar, aksesserer du det som måtte ligge på stacken heller enn tabell (forutsatt at implementasjonen bruker en stack og allokerer de lokale variablene der, hvilket mesteparten av C++-implementasjoner gjør). Det du antageligvis ønsker å bruke her er std::vector. Dersom det av forskjellige grunner ikke er aktuelt, ønsker du å allokere plassen dynamisk med new[] etter at størrelsen er angitt av brukeren. Endret 26. august 2010 av zotbar1234 Lenke til kommentar
Dead_Rabbit Skrevet 26. august 2010 Del Skrevet 26. august 2010 Evt. bare vente med å lage arrayet til du har lest inn data fra brukeren. Det vil jeg si er å foretrekke, da du slipper å styre med å frigjøre dritten etterpå. (Da bør man også ta hensyn til hvilke exceptions som muligens kastes, osv.) Lenke til kommentar
vebbiii Skrevet 27. august 2010 Forfatter Del Skrevet 27. august 2010 Ah, takk. Jeg initialiserte antallPar til 0, og da funket det Jeg tviler på det. Dersom du initialiserer antallPar (digresjon: for guds skyld, bli kvitt uvanen med å skrive koden på norsk) til 0, hva er da størrelsen på tabell? Og når den størrelsen først er satt, går det ikke an å "utvide" tabell dynamisk etter det igjen. Med mindre brukeren skriver faktisk 0 for antallPar, aksesserer du det som måtte ligge på stacken heller enn tabell (forutsatt at implementasjonen bruker en stack og allokerer de lokale variablene der, hvilket mesteparten av C++-implementasjoner gjør). Det du antageligvis ønsker å bruke her er std::vector. Dersom det av forskjellige grunner ikke er aktuelt, ønsker du å allokere plassen dynamisk med new[] etter at størrelsen er angitt av brukeren. Hehe, du har rett. Jeg så selv at jeg hadde satt verdi på tabellen før jeg gav antallPar en verdi, noe jeg fikset samtidig. Dog er det ikke behov for å utvide tabellen etter hvert slik denne oppgaven er lagt opp. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå