Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    83

    C - Aiutino con la memoria

    Salve a tutti, ho questo codice, funziona tutto Ok ma vorrei chiarire con voi alcuni dubbi:

    #include <stdlib.h>
    #include <stdio.h>
    #define N 10

    int main(void)
    {

    char buffer[]="questa_stringa_e_stata_riempita";
    char *stringa[N]={};

    /* se nella dichiarazione di stringa[N] non usavo: "= {}"; e successivamente gli assegnavo la stringa contenuta in buffer, andavo in segmentation fault. Ho preferito a settare a 0 tutte le stringhe, sperando di poterle riempire dopo senza rischi */

    int i=0;

    printf("I valori prima di cambiarli:\n\n");

    for(i=0; i<N; i++)
    printf("stringa[%d]=%s \n",i,stringa[i]);



    printf("\nQuesti sono gli indirizzi:\n\n");

    for(i=0; i<N; i++)
    printf("&stringa[%d]=%d\n",i,&stringa[i]);



    for(i=0; i<N; i++)
    stringa[i]=buffer;



    printf("\nI valori cambiati:\n\n");

    for(i=0; i<N; i++)
    printf("stringa[%d]=%s \n",i,stringa[i]);



    system("pause>nul");

    }

    Il mio scopo è quello di realizzare un piccolo programmino che leggendo un file, trasferisca ogni parola in una stringa[i]...Per poi farci delle cose successivamente. Ora ho 2 domande:

    1):
    C'è rischio che se la stringa che scrivo in "stringa[i]" è troppo grande mi può mandare in segmentation fault?

    2):
    Se il file contiene più di 10 parole come posso aumentare di colpo la dimensione dell'array?
    Devo utilizzare il suo indirizzo base e riallocare spazio con un realloc?


    GRAZIE A TUTTI
    #include <pgnvni.h>

  2. #2

    Re: C - Aiutino con la memoria

    Originariamente inviato da pgnvni
    Il mio scopo è quello di realizzare un piccolo programmino che leggendo un file, trasferisca ogni parola in una stringa[i]...Per poi farci delle cose successivamente. Ora ho 2 domande:
    Da quello che vedo nel tuo codice hai definito stringa come un puntatore a char *, quindi non hai allocato di fatto la memoria in cui verranno memorizzate le stringhe. Ricordati quindi che dovrai memorizzare allocare la memoria per ciascuna stringa con la malloc.
    1):
    C'è rischio che se la stringa che scrivo in "stringa[i]" è troppo grande mi può mandare in segmentation fault?
    In linea di massima sì, ma dipende da come allochi la memoria che assegni a stringa[i].
    2):
    Se il file contiene più di 10 parole come posso aumentare di colpo la dimensione dell'array?
    Devo utilizzare il suo indirizzo base e riallocare spazio con un realloc?
    Sì, ma per farlo stringa dovrà essere allocata fin dall'inizio con malloc.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    La risposta ai tuoi problemi si chiama "Gestione dinamica della memoria", ovvero quando a tempo di compilazione non conosci la quantità di memoria di cui hai bisogno, ma lo sai soltanto durante l'esecuzione del programma.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2006
    Messaggi
    83
    potete farmi vedere come devo fare per entrambi i casi senza rimandarmi su altri siti o guide?

    Provando sotto dev c++ la mia soluzione, funziona, ma per evitare il peggio preferisco ascoltare i vostri consigli.

    Aiutatemi, grazie
    #include <pgnvni.h>

  5. #5
    Utente di HTML.it L'avatar di Pacio88
    Registrato dal
    Sep 2007
    Messaggi
    447
    Per risolvere il numero di parole in più potresti scrivere una funzione che conta le parole presenti nel file e dopo allocare in memoria un vettore di dimensione adeguato.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.