Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Compilazione strani comportamenti...
Forum - C/C++ - Compilazione strani comportamenti...

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 1:00
Giovedì, 01/01/1970
Salve a tutti oggi ho provato a realizzare un modestissimo programma su linux lo compilo ed è perfetto, gira che è una meraviglia e fin qui tutto normale... però appena lo compilo per winzoz non mi funziona più, o meglio mi compila ma appena lo eseguo da un comportamento completamente anomalo!... cosa può essere??.. il sorgente è questo:

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. struct list_t{
  5.         int intero;
  6.         struct list_t *next;
  7. };
  8.  
  9. typedef struct list_t list_t;
  10.  
  11. list_t *
  12. list_alloc(list_t *list, int i);
  13.  
  14. void
  15. list_print(list_t *list);
  16.  
  17.  
  18. int main (int argc, char *argv[]) {
  19.        
  20.         list_t *list;
  21.         int i;
  22.  
  23.         printf("Inserisci numero di elementi\n");
  24.         scanf("%d", &i);
  25.  
  26.         list = list_alloc(list, i);
  27.  
  28.         list_print(list);
  29.  
  30. }
  31.  
  32. list_t *
  33. list_alloc(list_t *list, int i){
  34.         int j;
  35.         list_t *head;
  36.  
  37.         list = (list_t *)malloc(sizeof(list_t));
  38.                 printf("inserisci numero\n");
  39.                 scanf("%d", &list -> intero);
  40.  
  41.         head = list;
  42.         for(j =0; j<i-1; j++){
  43.  
  44.                 list -> next = (list_t *)malloc(sizeof(list_t));       
  45.                 list = list -> next;   
  46.                 printf("inserisci numero\n");
  47.                 scanf("%d", &list -> intero);
  48.         }
  49.         list = NULL;
  50.         return head;
  51. }
  52.  
  53. void
  54. list_print(list_t *list){
  55.  
  56.         while(list){
  57.                 printf("elemento: %d\n", list -> intero);
  58.                 list = list -> next;
  59.        
  60.         }
  61. }


PM Quote
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Segnala al moderatore
Postato alle 17:12
Mercoledì, 30/06/2010
Non funziona perché:
Testo quotato

Il cervello è come un paracadute...... funziona solo se si apre.


Prova concentrarti un attimo su list_alloc.

PS: Si chiama windows e non winzoz

PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 17:25
Mercoledì, 30/06/2010
si lo so che si chiama windows ma non mi sta cosi tanto simpatico... comunque cos'ha di strano list_alloc???? su linux funziona benissimo senza problemi....

PM Quote
Avatar
GuglielmoS (Ex-Member)
Pro


Messaggi: 114
Iscritto: 27/11/2009

Segnala al moderatore
Postato alle 17:55
Mercoledì, 30/06/2010
Testo quotato

Postato originariamente da giovybus:

si lo so che si chiama windows ma non mi sta cosi tanto simpatico... comunque cos'ha di strano list_alloc???? su linux funziona benissimo senza problemi....


Il problema come ti è stato detto è nella list_alloc...
Infatti il parametro list devi passarlo come "puntatore di puntatore a list_t", e una volta finito il caricamento della lista devi settare a NULL l'elemento successivo all'ultimo.
Codice sorgente - presumibilmente C/C++

  1. list_t *
  2. list_alloc(list_t **list, int i){
  3. // sistema te il resto della funzione
  4. ...
  5.     (*list)->next = NULL;
  6.     return head;
  7. }



PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 17:59
Mercoledì, 30/06/2010
però perché su linux funziona??...

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6403
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 18:02
Mercoledì, 30/06/2010
Testo quotato

Postato originariamente da giovybus:

però perché su linux funziona??...



Su Linzozz appare funzionante, ma quello che succede in memoria non viene rilevato ...

Direi che Windows si è comportato molto meglio ...

Impariamo a rispettare ciò che non conosciamo ...


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à.
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 18:12
Mercoledì, 30/06/2010
Ci mancherebbe... però la cosa strana è che all'università il prof ci fa fare sempre cosi come ho scritto io... per questo mi è sorto il dubbio!..

Capite??.. con le liste non ci ha mai fatto vedere puntatori di puntatori a liste...

PM Quote
Avatar
GuglielmoS (Ex-Member)
Pro


Messaggi: 114
Iscritto: 27/11/2009

Segnala al moderatore
Postato alle 18:34
Mercoledì, 30/06/2010
Testo quotato

Postato originariamente da giovybus:

Ci mancherebbe... però la cosa strana è che all'università il prof ci fa fare sempre cosi come ho scritto io... per questo mi è sorto il dubbio!..

Capite??.. con le liste non ci ha mai fatto vedere puntatori di puntatori a liste...  


Magari utilizzava il C++, e nella firma del metodo aveva messo '&' al posto del secondo '*' (a scuola da me le liste sono state spiegate con questo metodo).

Ultima modifica effettuata da GuglielmoS il 30/06/2010 alle 18:35
PM Quote
Avatar
()
Newbie


Messaggi:
Iscritto:

Segnala al moderatore
Postato alle 18:45
Mercoledì, 30/06/2010
No no usa il C perchè stiamo facendo questo come materia, mmha!.. chiederò al tutor allora se mi sa dire qualcosa perché tra una settimana ho l'esame e oggi sono troppo confuso con questa storia che si è sollevata!!...

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo