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++ - 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
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)...

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
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