Archief - [PROG][C++] Segmentation fault bij cin

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

dobber_1987

Legacy Member
Ik ontvang een Error while dumping state (probably corrupted stack) en een segmentation fault (core dumped) als ik een getal ingeef om op te slagen in mn array.
(AANTAL_VAK = 2 en AANTAL_STUD = 3)

Code:
int** leesPunten(string* namen, string* vakken){
  int** punten = new int*[AANTAL_VAK];
  for (int i=0; i<AANTAL_STUD; i++){
    cout << "Geef de punten van student " << namen[i] << ":" << endl;
    for (int j=0; j<AANTAL_VAK; j++){
      cout << "Geef de punten voor vak " << vakken[j] << ": ";
      cin >> punten[i][j];
    }
  }
  return punten;
}

met een getline lukt het ook niet...

S3cT0r

Legacy Member
Ik vind de werking van new op z'n best verwarrend, maar toch denk ik dat daar ongeveer het probleem zit.

In C zou het denk ik ongeveer worden:

Code:
int** punten;
int i,j

punten = malloc(sizeof(int) * AANTAL_STUD);

for (i = 0; i < AANTAL_STUD; ++i) {
  *(punten + i) = malloc(sizeof(int) * AANTAL_VAK);
}

En dit is enkel nog maar voor de allocatie, dubbele pointers zijn soms _erg_ verwarrend.

Het is ook efficiënter en in sommige gevallen ook duidelijker om een 1D-array/pointer te maken, in één keer te alloceren, en te doen alsof het een 2D-array/pointer is.

ipv:

array[w][h]

wordt het:

array[w*MAXWIDTH + h]

<-- dit kan dan in een macro of template of iets dergelijks gestoken worden zodat je ook aan de buitenkant precies een 2D-array krijgt, maar je moet hier extreem mee oppassen in het geval van een macro

(ik ben niet volledig zeker of het nu MAXWIDTH of MAXHEIGHT is of dergelijke, use the internets)

EDIT: http://www.ibiblio.org/pub/languages/fortran/append-c.html

BuiZe

Legacy Member
Code:
  int** punten = new int*[[color=red]AANTAL_STUD[/color]];
  for (int i=0; i<AANTAL_STUD; i++){
     [color=red]punten[i] = new int[AANTAL_VAK];[/color]

BartDP

Legacy Member
zit gij toevallig op EhB-IWT en hebt ge daar nu Programmeren II?

forloRn_

Legacy Member
Wat BuiZe ons al wist te vertellen: je alloceert geheugen voor een array van pointers, niet voor een array van arrays.

Twee tips:

1) gebruik een vector in plaats een array, dan ben je direct ook van die #defines af
2) C++ is objectgeoriënteerd, deze code is dat niet

Tyfius

Legacy Member
Als 't voor 't school is doet hij dat best op de manier die ze daar nu zien.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan