Gå til innhold

"Segmentation fault" i ubuntu


Anbefalte innlegg

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 av therealvebbi
Lenke til kommentar
Videoannonse
Annonse

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

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 av zotbar1234
Lenke til kommentar

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...