Newsgroup: it.comp.lang.c
Titolo: Problema con un programma...

Ciao a tutti e grazie in anticipo per l'attenzione.
Ho un problema con un programma demente....
In teoria dovrebbe scrivere su un file di testo, il contenuto di un certo
blocco di memoria RAM. Il fatto è che non funge!!!
Mi da il bastardissimo "null pointer assignement"....e cmq la mia versione
funziona con porzioni "esigue" di ram....giusto perche ho sempre avuto una
difficolta innata con l'indirizzamento di memoria superiore a 1 mega
(puntatori far, huge, modelli di memoria e quelle belle cosine). Per ora mi
basta anche solo vedere il mio programmino girare...eccovi il listato:
#include <stdio.h>
void main (void)
{
 FILE *out;
 char path[60];
 int dimensione;
 char *mem;
 printf("\n+------------------------------------------------+\n");
 printf("|Questo programma cattura tutta la memoria       |\n");
 printf("| e ne salva il contenuto su disco fisso         |\n");
 printf("+------------------------------------------------+\n");
 printf("Inserisci l'indirizzo del file di output\n");
 scanf("%s",path);
 printf("Inserisci la dimensione del blocco da prelevare\n");
 printf("NOTA:Non esagerare!!!\n");
 scanf("%u",dimensione);
 if ( (out = fopen(path, "w+")) == NULL )
 {
  printf("Errore nella creazione del file output\n");
  printf("Uscita dal programma in corso\n");
  return;
 }
 fwrite(mem,dimensione,1,out);
 fclose(out);
}
Ciao e grazie a tutti!!!!
Tdx

--------------------------------------------------------------



piccolo cambiamento che ha fatto Andrea...
Innanzitutto main() deve restituire un int, perche' il codice sia
conforme allo standard del linguaggio.
Poi, scanf() deve memorizzare l'input dell'utente da qualche parte e,
come saprai, l'unico modo per far si' che una funzione modifichi
(leggi: assegni un valore) ad una variabile esterna ad essa e al di
fuori di uno scope globale, e' passare quella variabile per
riferimento, o meglio, visto che il C possiede SOLO il passaggio per
valore, passare per valore il suo puntatore. Facendo riferimento con
il suo puntatore alla memoria puntata, si puo' variarla (leggi
assegnarla).


Ma mem non e´ ancora stato inizializzato e sta puntando a una posizione
casuale di memoria.
Il programma dovrebbe anche chiedere da quale indirizzo di memoria partire
per il salvataggio sul file.

you wrote:

Il programma dovrebbe leggere (anziche' scrivere) mem da quanto ho
capito e quindi e' necessario allocare la memoria per esso.


"Ho un problema con un programma demente....
In teoria dovrebbe scrivere su un file di testo, il contenuto di un certo
blocco di memoria RAM. Il fatto è che non funge!!!"
Questa era la richiesta, e nel programma si dichiara:
char *mem;
senza un assegnamento a una zona di memoria da cui leggere, per cui quando
si andra´ a scrivere sul file con:
fwrite(mem,dimensione,1,out);
avremo scritto su out un numero (pari a dimensione) di bytes a partire da
una zona casuale di memoria puntata da mem non inizializzato.
Fra parentesi se si vuole mettere su file un dump della memoria occorre
aprire il file in modalita´ binaria e non ricordo se la modalita´ "w+" che
e´ stata usata sia scrittura binaria o testuale.

e´ stata usata sia scrittura binaria o testuale.
Non e' binaria.


 e´ stata usata sia scrittura binaria o testuale.
  Queste distinzioni si debbono fare soltanto se si ha a che fare con
cozzaglie di n-mila istruzioni confusionarie una dietro all'altra(altrimenti
dette S.O ms windoz) in quanto su
sistemi unix "w+" o "wb+" non fa differenza alcuna :) :)
Ivan Molella




possa "curiosare" dappertutto vero?
Ahhh vade retro ! Satan !!! :)
