problema programmazione C - aiutooooo!!!


xiloforo
 Share

Recommended Posts

ciao, sono riuscito a modificare il codice, ho trovato che funziona anche in questo modo :)

#include <stdio.h>char *prova[80]; /*la variabile dev'essere esterna*/main (){int num;char nomefunz (int num); printf("numero: ");scanf("%d",&num);nomefunz(num);printf("Allora: %s",*prova);}char nomefunz(int num2) {if (num2>5) *prova="ciao"; else  *prova="";return;}

un'ultima domanda... ma se io volessi trasformarlo in un eseguibile per mac o per windows come devo fare? esiste un modo?

L'eseguibile è, se usi XCode, nella cartella del tuo progetto, nella cartella build/Release. È questo l'eseguibile. Tuttavia, prima di pescare l'eseguibile devi fare Project>Set Active Build Configuration>Release e compilare di nuovo.

Purtroppo per Windows non ti posso aiutare (ho poca esperienza col nemico :D ), ma anche lì devi usare un compilatore e compilare il tuo codice C, da qualche parte troverai l'eseguibile per Win... Se usi DevC++ ti posso aiutare, altrimenti no, perché sono ignorante in materia, ad esempio, di Visual Studio

Inoltre non è possibile fare con facilità un doppio eseguibile, che giri sia su Win che su Mac, perlomeno se usi il C, ma penso che questo già lo sapessi

Link to comment
Share on other sites

  • 2 months later...
  • Replies 41
  • Created
  • Last Reply

Top Posters In This Topic

Riutilizzo il primo thread disponibile sulla programmazione in C per chiedervi aiuto su questa maledetta malloc che non vuole sapere di funzionare...

allora, dichiaro la seguente struttura:

typedef struct last_three_faces

{

CvRect *f_primo;

CvRect *f_secondo;

CvRect *f_terzo;

} last_three_faces;

e ho la seguente funzione:

void save_last_face_found(CvRect *new_face, last_three_faces *old_faces_found)

{

if (old_faces_found == NULL) {

old_faces_found = (last_three_faces*) malloc(sizeof(last_three_faces));

old_faces_found->f_primo = NULL;

old_faces_found->f_secondo = NULL;

old_faces_found->f_terzo = NULL;

}

}

La funzione di cui sopra viene richiamata iterativamente da un altra funzione, che all'inizio contiene la seguente dichiarazione:

static last_three_faces *last_faces_found;

La funzione richiama save_last_face_found nel seguente modo:

save_last_face_found(r, last_faces_found);

Ora, al rientro dalla funzione save_last_face_found, la variabile last_faces_found non contiene valore!!!!perchè?!?!?il passaggio dei parametri non l'ho mica fatto per indirizzo????

ammetto che sono un grafico e non un programmatore, ma questa roba mi serve assolutamente per la tesi!!!e non ho idea...le mie conoscenze di C sono assai limitate...qualcuno sa dirmi dove sbaglio???vi prego..

Link to comment
Share on other sites

La funzione di cui sopra viene richiamata iterativamente da un altra funzione, che all'inizio contiene la seguente dichiarazione:

static last_three_faces *last_faces_found;

Inizializza il puntatore a NULL, altrimenti ti ritrovi un valore diverso da NULL e non entrerai mai nell'if.

Poi quello che tu tenti di fare non e' corretto per i tuoi scopi.

Se ho capito bene, chiami la funzione e speri che, se sei nel caso di NULL, lui allochi della memoria e tu riesca a vedere questa memoria dal fuori della funzione utilizzando la variabile last_faces_found.

Per fare questo devi modificare il valore contenuto in last_faces_found e, per modificare il contenuto di questa variabile devi usare il puntatore alla zona di memoria di questa variabile.

Nel tuo caso last_faces_found e' dichiarata come puntatore a una zona di memoria, cioe' la variabile last_faces_found punta a una zona di memoria. Tu pero' vuoi cambiare il valore di questo puntatore nel caso sia uguale a NULL. Per fare questo hai bisogno il puntatore alla variabile puntatore (e' un gioco di parole).

Ci sono due soluzioni:

la prima e' passare il puntatore a last_faces_found con:

save_last_face_found(r, &last_faces_found);

usando questa devi modificare all'interno della funzione i punti in cui usi il valore di last_faces_found.

la seconda, molto piu' semplice:

last_faces_found = save_last_face_found(r, last_faces_found);

alla tua funzione fai tornare il nuovo valore da assegnare a last_faces_found.

Spero di essermi spiegato.

Saluti

Cpu86

Link to comment
Share on other sites

Si si...c'ho lavorato su e mi sono accorto delle minchi*te che ho fatto!

Grazie comunque Cpu86!Sei stato chiarissimo...

alla fine, se ti può interessare ho adottato la seconda soluzione che mi hai proposto, ovvero restituire il puntatore all'area di memoria allocata!direi che è la soluzione ottimale...

Del resto, già il C è mi è ostile perchè non sono un mago in questo genere di programmazione...se poi ci aggiungi i puntatori...grazie mille comunque...ciao ciao

Link to comment
Share on other sites

  • 2 weeks later...

Allora, rinfrescatemi un attimo la memoria...

io ho la seguente struttura:

typedef struct my_face {

double x_center;

double y_center;

double face_side;

} my_face;

E voglio dichiarare un array di variabili di tipo my_face.

La dimensione dell'array è nota a priori, ed è N_OLD_FACES.

Qualcuno sa mica come si fa?non mi ricordo più...

Link to comment
Share on other sites

Si ok...però è corretto definire un array di puntatori...perchè gli oggetti contenuti nell'array sono delle struttura, dunque è meglio definire dei puntatori che vengono poi gestiti mediante malloc & Co.

Sto dicendo cavolate?

Le mia basi di C sono molto ridotte...

Se dichiari un array di puntatori, per ogni elemento dell'array devi "mallocare" la memoria necessaria.

Link to comment
Share on other sites

Ho un vecchio sorgente in C, fatto da me,.

Adesso con questa bellissima bestia del mac, non riesco a capire come a compilare

tale sorgente se non usando il gcc.

Con xcode come cav..... faccio a editare il sorgente e a compilarlo.

Aprendo un nuovo progetto ...???

Importando il sorgente:::?

Non mi raccapezzo proprio???

AIUTO:(

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share