Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problemi con allocazione memoria
Forum - C/C++ - Problemi con allocazione memoria

Avatar
Hawk (Normal User)
Newbie


Messaggi: 5
Iscritto: 27/07/2006

Segnala al moderatore
Postato alle 18:18
Giovedì, 27/07/2006
Salve a tutti...sono nuovo di qui..volevo chiedere aiuto riguardante l'allocazione memoria.
Ho un prog che legge da file una matrice e il termine noto e poi con il metododi eliminazione di gaus mi risolve il sistema.
Problema..mi viene il segmentation fault...e non capisco perchè ho 2 prog uguali uno in c(il mio) e l'altro in c++( quello del prof) e ovviamente il suo funziona...se qualcuno mi può spiegare perchè..grazie...allego la parte solamente della lettura e stampa a video e il file della matrice

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
int n;
float **A, *x, *b;

void leggidati(char nomefile[]) {
  FILE *fin;
  int i, j;

  fin = fopen("nomefile","r");
  fscanf(fin,"%d",&n);
  
  x = (float*)malloc(n*sizeof(float));
  b = (float*)malloc(n*sizeof(float));
  
  A = (float**)malloc(n*sizeof(float*));
  for (i = 0; i < n; i++)
    A[ i ] = (float*)malloc(n*sizeof(float));
    
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++){
      fscanf(fin,"%f",&A[ i ][j]);
    
      printf("%f ",A[ i ][j]);
      if (j==n-1) printf(" \n");
      }
  
  for(i=0 ;i<n ;i++){
    fscanf(fin,"%f",&b[ i] );
    printf("b[%d] = %f\n",i,x[ i ]);
    }
fclose(fin);

}


main (){

char nomefile[256];

printf("inserisci file:  \n" );
scanf("%s",&nomefile);
leggidati(nomefile);
}


matrice:

3
2    3    -1
0    10    5
0    0    2
-1    -5    -2

vi ringrazio

Ultima modifica effettuata da Hawk il 29/07/2006 alle 20:14
PM Quote
Avatar
Zani88 (Member)
Pro


Messaggi: 136
Iscritto: 07/05/2006

Segnala al moderatore
Postato alle 20:34
Giovedì, 27/07/2006
A = (float**)malloc(n*sizeof(float*));
for (i = 0; i < n; i++)
A = (float*)malloc(n*sizeof(float));

Qui dentro il for non ci va A??

Edit 1 : ATTENZIONE noto ora che le parantesi quadre non vengono mostrate??? Come mai?

Nel programma che hai postato non si vedono ma se si fà reply si vedono!!!

Edit 2 : Ancora peggio si abilita il corsivo!!!

Ultima modifica effettuata da Zani88 il 27/07/2006 alle 20:37


"Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C." (Robert Firth)
PM Quote
Avatar
Hawk (Normal User)
Newbie


Messaggi: 5
Iscritto: 27/07/2006

Segnala al moderatore
Postato alle 21:31
Giovedì, 27/07/2006
gia.....quindi?....scusami..ma  non ti ho seguito molto...hai per caso trovato il problema?

PM Quote
Avatar
Hawk (Normal User)
Newbie


Messaggi: 5
Iscritto: 27/07/2006

Segnala al moderatore
Postato alle 21:36
Giovedì, 27/07/2006
a..tu dicevi di inserire A al posto di i?..no no..i è la variabile che mi fa scorrere le righe della matrice.. sarebbe A [ i ] ...sperando si veda..

PM Quote
Avatar
Hawk (Normal User)
Newbie


Messaggi: 5
Iscritto: 27/07/2006

Segnala al moderatore
Postato alle 21:39
Giovedì, 27/07/2006
ecco ho modificato il listato mettendo [ i ] con gli spazzi cosi non si attiva il corsivo...

PM Quote
Avatar
Zani88 (Member)
Pro


Messaggi: 136
Iscritto: 07/05/2006

Segnala al moderatore
Postato alle 22:06
Giovedì, 27/07/2006
All'inizio credevo avessi scritto A e basta e non A [ i ] ma poi mi sono accorto che non veniva visualizzato....

Prova a fare una cosa nella fopen scrivi te il nome del file al posto di passarlo con una variabile (nomefile)...


"Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C." (Robert Firth)
PM Quote
Avatar
Zani88 (Member)
Pro


Messaggi: 136
Iscritto: 07/05/2006

Segnala al moderatore
Postato alle 22:10
Giovedì, 27/07/2006
Che cavolo il problema non è quello è che te hai scritto fin = fopen("nomefile","r"); non ti sembra sbagliato? in questo modo il programma cerca di aprire il file che si chiama nomefile e non il file che ha come nome il valore contenuto nella variabile nomefile!!! Devi togliere le " " insomma...

Ti consiglio sembra di controllare che il puntatore ad un file non sia uguale a NULL dopo una fopen...

Va bene dai sono cose che capitano sopprattuto se stai usando da poco il C...

Ultima modifica effettuata da Zani88 il 27/07/2006 alle 22:11


"Una delle principali cause della caduta dell'Impero Romano fu che, privi dello zero, non avevano un modo per indicare la corretta terminazione dei loro programmi C." (Robert Firth)
PM Quote
Avatar
Hawk (Normal User)
Newbie


Messaggi: 5
Iscritto: 27/07/2006

Segnala al moderatore
Postato alle 23:28
Giovedì, 27/07/2006
cavolo....ma dove ho la testa!!!...e pensa che non è da poco che ci sono...sul c...non me n'ero manco accorto delle virgolette....grazie mille...
adesso posso farmi l'esame di calcolo in tranquillità...
grazie :k:

PM Quote
Avatar
MrMarkolinus (Ex-Member)
Newbie


Messaggi: 6
Iscritto: 23/05/2006

Segnala al moderatore
Postato alle 23:11
Lunedì, 07/08/2006
lol è successa la stessa cosa anche ame un paio di giorni fa. dopo aver passato due giorni a leggere guirde sui puntatori ho scoperto che mi bastava togliere le virgolette

PM Quote