vale77777 (Normal User)
Newbie
Messaggi: 15
Iscritto: 08/10/2018
|
Salve, ho scritto questo programmino:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
char *a()
{
struct b
{ char g[10];
int mese;
};
b c;
c.mese=46;
strcpy(c.g, "anni");
return c.g;
}
int main ()
{
cout<<a()<<endl;
return 0;
}
in output dovrei avere la scritta "anni" ma non va..sicuramente sbaglio quando richiamo la funzione a() nel cout..sapete darmi qualche consiglio?
|
|
vale77777 (Normal User)
Newbie
Messaggi: 15
Iscritto: 08/10/2018
|
ho risolto in questo modo:
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
char *a()
{
struct b
{ char g[10];
int mese;
};
b c;
c.mese=46;
strcpy(c.g, "ciao");
char* i= new char[10];
strcpy(i,c.g);
return i;
}
int main ()
{
cout<<a()<<endl;
return 0;
}
ora il problema è con la struct:
#include <stdio.h>
#include <iostream>
using namespace std;
struct a{
int val1;
int val2;
};
struct a *funx01(){
struct a struttura;
struttura.val1 = 12;
struttura.val2=13;
return &struttura;
}
int main()
{
cout<< funx01()->val1;
cout<<funx01()->val2;
return 0;
}
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6378
Iscritto: 03/01/2010
|
Per la questione struttura
Codice sorgente - presumibilmente C++ |
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 nessuno il 16/10/2018 alle 16:08
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
vale77777 (Normal User)
Newbie
Messaggi: 15
Iscritto: 08/10/2018
|
#include <iostream>
#include <stdlib.h>
using namespace std;
struct a
{
int val1;
int val2;
};
a *funx01(){ //funx01 è di tipo struct
a* c;
c= new a;
c->val1=12;
c->val2=46;
return c;
}
int main()
{
cout<<funx01()<<"\n";
cout<<funx01()->val1<<endl;
cout<<funx01()->val2<<endl;
return 0;
}
Codice sorgente - presumibilmente Plain Text |
nel frattempo avevo risolto in questo modo
|
|
vale77777 (Normal User)
Newbie
Messaggi: 15
Iscritto: 08/10/2018
|
riguardando mi sembra che abbiamo risolto allo stesso modo
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6378
Iscritto: 03/01/2010
|
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.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
AldoBaldo (Member)
Guru
Messaggi: 699
Iscritto: 08/01/2015
|
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...
Codice sorgente - presumibilmente C++ |
#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. |
|
AldoBaldo (Member)
Guru
Messaggi: 699
Iscritto: 08/01/2015
|
Seguendo lo stesso ragionamento, anche con la seconda struttura è possibile questo:
Codice sorgente - presumibilmente C++ |
#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. |
|
AldoBaldo (Member)
Guru
Messaggi: 699
Iscritto: 08/01/2015
|
Seguendo lo stesso ragionamento, anche con la seconda struttura è possibile questo:
Codice sorgente - presumibilmente C++ |
#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. |
|