Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    3

    Problema con C

    Ciao. Volevo chiedere un aiuto su un problema con un programma.
    Volevo scrivere un programma che caricasse una matrice di double di dimensione nxn.
    Siccome n è variabile, ho dovuto allocare dinamicamente nxn double con la funzione malloc.
    Ho voluto usare un puntatore uni-dimensionale, quindi la matrice A la considero come un vettore riga nxn, e l'elemento A[i][j] quindi lo considero come A[n*i+j].
    A quanto pare il programma mi fa un errore di segmentazione, ma non riesco a capire dove sia l'errore. Ve lo copio qua sotto:

    //===============PROGRAMMA===============

    #include<stdio.h>
    #include<stdlib.h>

    //================PROTOTIPI================

    void carica_matrice(double *,int);

    //==============DATI GLOBALI================

    int n; //Per la dimensione della matrice
    double *A_p; //Per puntare la matrice

    //===============DEFINIZIONI================

    int main(void)
    {
    printf("Quante righe e colonne?\n");
    scanf("%d",&n);
    A_p=(double *) malloc (sizeof(double[n*n]));//Per allocare la memoria per la matrice
    carica_matrice(A_p,n);
    system("pause");
    return(0);
    }

    void carica_matrice(double *a,int n)
    {
    int i,j;
    for(i=0;i<n;i++)
    {
    for(j=0;j<n;i++)
    {
    printf("\n elemento [%d][%d]= ",i+1,j+1);
    scanf("%lf",&a[n*i+j]);
    printf(" i=%d, j=%d",i,j);//??Perchè incrementa i indefinitamente e lascia j=0??
    }
    }
    return;
    }

    /* Grazie a chi mi aiuta! */

  2. #2
    il programma che hai scritto è in C. Se vuoi usare il C++ alloca la memoria con new e rilasciala con delete [] .
    Acquisisci l'imput da tastiera con cin e scrivi sullo schermo con cout.
    Non usare dati globali.
    ciao
    sergio

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    3
    Chiedo scusa, ma mi sono sbagliato: il linguaggio che devo usare è il C, quindi la funzione malloc va bene. Chiarito questo, riesci a riconoscere l'errore concettuale in quel programma?

  4. #4
    mi cade l'occhio sul loop interno for (j=0; .. dove incrementi i anzichè j .
    Inizia a correggere questo
    ciao
    sergio

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2009
    Messaggi
    3
    Perfetto, mi è sfuggita la spiegazione più banale... copiando e incollando il contatore mi sono dimenticato di cambiare l'indice.
    Grazie!

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.