PDA

Visualizza la versione completa : Problema Allocazione dinamica c++


vincenzo90
27-08-2016, 13:21
Buon giorno a tutti, sono un nuovo iscritto al forum, ho da porvi un problema.
Ho elaborato un tema d'anno per un esame di informatica in c, solo che ora trovo non pochi problemi nel passarlo in c++(premettendo che il c++ non l'ho ancora capito fino in fondo), specialmente quando al posto dei semplici struct, devo obbligatoriamente usare le classi.
Posto qui uno stupido codice prova che sto utilizzando per arrivare alla conclusione(utilizzo visual studio 2013, la sintassi è quella del c.Sotto troverete il mio commento del codice).

codice:



#include "stdafx.h"
#include <iostream>
using namespace std;
class persona
{
protected:


char temp_username[20];
char temp_password[20];


FILE *FS;


public:
char username[20];
char password[20];
int contastudenti;
persona();
~persona(){};




};
class studente :public persona
{
private:
int matricola;


public:


~studente(){ };
studente(){};
int registrati(class studente*,class persona);

};


persona::persona()
{
contastudenti = 1;


}
int studente::registrati(class studente*A, class persona D)
{
int j = D.contastudenti - 1;


printf("\INSERISCI NOME UTENTE:");
scanf("%s", temp_username);
strcpy(A[j].username, temp_username);
printf("\INSERISCI PASSWORD:");
scanf("%s", temp_password);
strcpy(A[j].password, temp_password);


D.contastudenti++;


printf("CONTASTUD vale: %d\n", D.contastudenti);


return D.contastudenti;
};


int main()
{
int i;
persona P;
studente *S = { new studente[P.contastudenti] };



P.contastudenti = S->registrati(S, P);
P.contastudenti = S->registrati(S, P);


for (i = 0; i < P.contastudenti-1; i++)
{
printf("NOME:%s\n", S[i].username);
printf("COGNOME:%s\n",S[i].password);


}






system("pause");
}



Quello che sto cercando di fare è quello di contare da FILE il numero di studenti e poi utilizzare quella variabile per creare un vettore di oggetti studente dove memorizzare nome cognome matricola ecc..In questo caso ho eliminato il file per semplicità e ho inizializzato con il costruttore di persona "contastudenti=1" per evitare, per ora, errori nell'allocazione dinamica nel main. Per far partire il costruttore ho dovuto creare un oggetto "Persona P" in modo tale da inizializzare "contastudenti" e per poi creare appunto l'allocazione dinamica iniziale. Fatto ciò prima di andare avanti ho voluto testare se aumentando il numero di studenti,e quindi anche contastudenti(funzione registrati), aumentava anche la memoria dinamica(come ho fatto in c) e grazie al ciclo for volevo stampare su schermo i nomi che immettevo;Tutto ciò ovviamente è finito con un bel break che è riconducibile sicuramente alla memoria heap. In sintesi vorrei prendere il numero di studenti dal file, creare un oggetto studente dinamico in cui memorizzare i nomi cognomi ecc,e poi aumentare o diminuire il numero di studenti e quindi far aumentare o diminuire anche la memoria dinamica durante l'esecuzione del programma.Inoltre vorrei chiedervi se era per forza indispensabile creare un oggetto persona P per inizializzare contastudenti o potrei farlo in altri modi? Se riuscite inoltre a trovare altri errori vi sarei debitore. Ringrazio tutti anticipatamente.

Loading