16/10/18 14:05
Per la questione struttura
struct a *funx01() {
struct a *struttura = new struct a;
struttura->val1 = 12;
struttura->val2 = 13;
return struttura;
}
int main()
{
struct a *t = funx01();
cout << t->val1;
cout << t->val2;
delete t;
return 0;
}
Attenzione al main e al delete (anche per il caso dell'array).
Ultima modifica effettuata da 16/10/18 14:08
16/10/18 15:07
vale77777
riguardando mi sembra che abbiamo risolto allo stesso modo
aaa
16/10/18 16:36
Sì ma nel main commetti degli errori.
Ti avevo scritto di fare diversamente e di usare il delete.
Chiamando tre volte la funzione con le tre cout hai fatto tre new diverse, creando tre strutture in memoria.
Non hai liberato la memoria di nessuna delle tre strutture e hai creato dei memory leak che, a lungo andare, creano problemi.
16/10/18 19:59
AldoBaldo
In alternativa alla creazione dinamica dell'oggetto nella funzione, potresti passare alla funzione stessa un puntatore ad un oggetto dichiarato in main, così da non doverlo distruggere esplicitamente...
#include <iostream>
#include <cstring>
using namespace std;
struct b {
char g[10];
int mese;
};
char *a( b *c ) {
c->mese=46;
strcpy( c->g, "anni" );
return c->g;
}
int main () {
b c;
cout<<a(&c)<<endl;
return 0;
}
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.
16/10/18 20:11
AldoBaldo
Seguendo lo stesso ragionamento, anche con la seconda struttura è possibile questo:
#include <iostream>
#include <stdlib.h>
using namespace std;
struct a {
int val1;
int val2;
};
a *funx01( a *ptr ){ //funx01 è di tipo struct
ptr->val1 = 12;
ptr->val2 = 46;
return ptr;
}
int main() {
a c;
funx01( &c );
cout<<c.val1<<endl;
cout<<c.val2<<endl;
return 0;
}
ATTENZIONE! Sono un hobbista e l'affidabilità delle mie conoscenze informatiche è molto limitata. Non prendere come esempio il codice che scrivo, perché non ho alcuna formazione accademica e rischieresti di apprendere pratiche controproducenti.