Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    [C] malloc , allocare 5 byte ma ne contiene + di 5

    ciao, ho un incompresione sulla funzione malloc , e un problema con sizeof.

    nel codice alloco dinamicamente , in un puntatore a char 5 byte , poi con strcpy gli "inserisco" una striga più lunga di 5 caratteri , non da nessun errore e funziona come
    se la potesse contenere , ma dove viene salvata la stringa ? io mi aspetterei
    un errore e il blocco del programma !
    vorrei visuallizzare quanti byte sono stati allocati ,prima tramite la funzione malloc , poi
    dopo la funzione relloc , avevo pensato a sizeof(puntatore) o sizeof(*puntatore) ,
    ma mostrano lo stesso numero di byte , qualunque sia la quantità di memoria allocata!

    se può essere utile , utilizzo ide devc++.

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main(int argc, char *argv[])
    {
      char *x;
    
      char parola[]="parola_molto_lunga";
    
      x=(char*)malloc(sizeof(char)*5);
    
      //printf("byte allocati in x %d\n",sizeof(x));
    
      //come visuallizare quanti byte sono stati allocati ??
    
      strcpy(x,parola); //perche x può contenere più di cinque caratteri ?
    
      puts(parola);
    
    /*
      x=(char*)relloc(x,sizeof(char)*20);
    
      printf("byte allocati in x %d\n",sizeof(x));
    
    */
      system("PAUSE");	
      return 0;
    }
    Tecnologia

  2. #2
    come visuallizare quanti byte sono stati allocati ??
    Non puoi, devi saperlo tu (del resto non c'è motivo di saperlo: se allochi tu la memoria, lo sai già).
    Nel tuo caso stai tranquillo che vengono allocati 5byte, ma il fatto che il programma ti giri lo stesso se metti una parola più lunga non significa nulla, magari lo fai girare in un altro computer o un'altra piattaforma e ti da errore.
    Non sai cosa succede all'avvio del programma, quanta memoria chiede il programma prima dell'avvio...dipende dal compilòatore, dal sistema operativo...


    Quanto a sizeof(puntatore) o sizeof(*puntatore), il primo ritorna la dimensione in byte per memorizzare unpuntatore (ovvero la stessa dimensione di un int), mentre il secondo ti da la dimensione di 1byte, ovvero il primo char puntato.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: [C] malloc , allocare 5 byte ma ne contiene + di 5

    Originariamente inviato da torn24
    nel codice alloco dinamicamente , in un puntatore a char 5 byte , poi con strcpy gli "inserisco" una striga più lunga di 5 caratteri , non da nessun errore e funziona come
    se la potesse contenere , ma dove viene salvata la stringa ? io mi aspetterei
    un errore e il blocco del programma !
    Come detto in altri thread (anche recentemente) quando un programma C scrive in memoria possono accadere 3 fatti:

    1) tutto ok, la memoria è correttamente allocata al processo ed è destinata a quello che il programmatore aveva previsto

    2) la memoria è allocata al processo ma destinata ad altro e comunque il programma ci può scrivere distruggendo dati (o parti dello stack)

    3) la memoria non è allocata al processo, hai un crash

    Evidentemente il caso 2) è quello che ti sta accadendo.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it L'avatar di torn24
    Registrato dal
    Aug 2008
    Messaggi
    551

    ciao

    Crazie a tutti , per le risposte !
    Da quel che ho capito , è un caso che funzioni correttamente .


    della serie "se funziona , non vuol dire che non hai commesso errori ! "
    Tecnologia

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: ciao

    Originariamente inviato da torn24
    Da quel che ho capito , è un caso che funzioni correttamente .


    della serie "se funziona , non vuol dire che non hai commesso errori ! "
    Sono gli errori peggiori ... se hai un crash, sei fortunato.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6

    Re: Re: ciao

    Originariamente inviato da oregon

    Sono gli errori peggiori ... se hai un crash, sei fortunato.
    eh già

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.