Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C] problema con i puntatori

    Salve a tutti,
    ho un problemino con i puntatori, ho un main.c che richiama una libreria passando ad una funzione di librearia un puntatore a struttura.

    Detto in poche parole questo è il main.c:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
    #include "my_libreria.h"
    
    int main()
    {
      matrix *mat1,*mat2;
      
      scrivi_elem(&mat1,0,0,1);
      
      printf("%d\n",mat1->matrice[0][0]);
      system("pause");	
    
    }
    questa è my_libreria.h dove ci sono tutte le dichiarazioni:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <conio.h>
    #include <string.h>
    
    #define cost_elem_max 100
    
    typedef enum{  
                   ERR_DIMENSIONI_ZERO = -1,
                   ERR_DIMENSIONI_DIFFERENTI = 0, 
                   ERR_NORMA_ZERO = 1, 
                   ERR_SCALARE_NULLO = 2, 
                   SUCCESS = 3
                 } CODICE_ERRORE;
                 
    typedef struct{
                    int matrice[cost_elem_max][cost_elem_max];
                    int num_riga;
                    int num_colonna;
                  }matrix;
    
    CODICE_ERRORE differenza(matrix *matr1,matrix *matr2,matrix *matr3);
    /*-----------------------------------------------------------------------------*/
    int norma(matrix *matr1);
    /*-----------------------------------------------------------------------------*/
    CODICE_ERRORE normalizzazione(matrix *matr1);
    /*-----------------------------------------------------------------------------*/
    CODICE_ERRORE prodotto_scalare(matrix *matr1,int scal);
    /*-----------------------------------------------------------------------------*/
    CODICE_ERRORE prodotto(matrix *matr1,matrix *matr2,matrix *matr3);
    /*-----------------------------------------------------------------------------*/
    CODICE_ERRORE prodotto_vettoriale(matrix *matr1,matrix *matr2,matrix *matr3);
    /*-----------------------------------------------------------------------------*/
    CODICE_ERRORE somma(matrix *matr1,matrix *matr2,matrix *matr3);
    /*-----------------------------------------------------------------------------*/
    void vett_trasposto(matrix *matr1,matrix *matr2);
    /*-----------------------------------------------------------------------------*/
    int leggi_elem(matrix *mat1,int riga,int colonna);
    /*-----------------------------------------------------------------------------*/
    void scrivi_elem(matrix *mat1,int riga,int colonna,int elemento);
    e la seguente è la funzione incriminata di my_libreria.c (non ve la inserisco tutta perchè senno sarebbe troppo lunga):


    codice:
    void scrivi_elem(matrix* mat1,int riga,int colonna,int elemento)
    {
         
        mat1->matrice[riga][colonna] = elemento;
        mat1->num_colonna = 4;
        system("pause");
        
       
    }
    Ora il programma si compila e poi crasha. Le due righe che mi danno problemi (se le commento il problema sparisce), sono l'asegnazione di "mat1->num_colonna" nella funzione di libreria, e la printf nel main.

    Sicuramente sbaglierò qualcosa di sinstassi ma non riesco a capire cosa.

    Vi ringrazio in anticipo per la disponibilità,
    Neptune.
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Scusa, ma tu passi il puntatore ad una matrice che non hai mai allocato?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Originariamente inviato da oregon
    Scusa, ma tu passi il puntatore ad una matrice che non hai mai allocato?
    Arguta osservazione

    ed immagino, visto che da ancora errore, che una cosa del genere non serva a nulla nel main:

    codice:
    matrix *mat1,*mat2;
      matrix mat5;
      mat1 = &mat5;
      scrivi_elem(&mat1,0,0,1);
    "Estremamente originale e fantasioso" By darkiko;
    "allora sfiga crepuscolare mi sa che e' meglio di atmosfera serale" By NyXo;
    "per favore, già è difficile con lui" By fcaldera;
    "se lo apri te e invece di "amore" ci metti "lavoro", l'effetto è lo stesso" By fred84

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    A questo punto, dovrebbe essere

    codice:
      matrix mat1;
    
      scrivi_elem(&mat1,0,0,1);
      
      printf("%d\n",mat1.matrice[0][0]);
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.