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

    [c] problema allocazione dinamica

    sono un neofita della programmazione e sto mparando il C
    non capisco dove sia l'errore:
    durante l'esecuzione scrive queste righe:

    Questo programma fa la tavola pitagorica dei numeri

    Fino a che numero la vuoi calolare?
    4
    4
    Segmentation fault

    codice:
    #include<stdlib.h>
    #include<stdio.h>
    
    void matrice(int **m[],int c);
    
    void main(void)
    {
    printf("\n\nQuesto programma fa la tavola pitagorica\n\n");
    printf("Fino a che numero la vuoi calolare?\n");
    int c;
    scanf("%i", &c);
    c = (int)c; 
    printf("%d\n",c);
    int mat[c][c];
    int i,j;
    matrice(&mat,c);
    
    for(i=0;i<10;i++)
    	{
    	for(j=0;j<10;j++)
    		{
    		printf("%d\t", mat[i][j]);
    		}
    	printf("\n");
    	
    	}
    
    exit(0);
    
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Il problema deriva dal fatto che se indichi una matrice 4 x 4, non puoi visualizzare con i due cicli for gli elementi di riga 0..9 e colonna 0..9 perche' non esistono in memoria.

    In piu', ti volevo dire che l'allocazione della matrice in quel modo non e' standard. Usa l'allocazione dinamica piuttosto ...

    Il codice della funzione matrice non e' mostrato ...

    La exit non e' necessaria.

  3. #3

    grazie

    ho risolto creando una variabile globale
    ecco il codice:
    codice:
    #include<stdlib.h>
    #include<stdio.h>
    int c;
    
    void matrice(int *m[c][c]);
    
    void main(void)
    {
    printf("\n\nQuesto programma fa la tavola pitagorica dei numeri fino al 10\n\n");
    printf("Fino a che numero la vuoi calolare?\n");
    scanf("%i", &c); 
    printf("%d\n",c);
    int mat[c][c];
    int i,j;
    matrice(&mat);
    
    for(i=0;i<(c);i++)
    	{
    	for(j=0;j<c;j++)
    		{
    		printf("%d\t", mat[i][j]);
    		}
    	printf("\n");
    	
    	}
    
    exit(0);
    
    }
    
    
    void matrice(int *m[c][c])
    {
    int i,j;
    
    for(i=0;i<c;i++)
    	{
    	for(j=0;j<c;j++)
    		{
    		m[i][j]=(i+1)*(j+1);
    		}
    	
    	}
    
    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Beh ... non hai risolto perche' hai dichiarato c globale (potevi lasciare c locale e passarla alla funzione ...) ma hai risolto l'errore di segmentation fault per il fatto che hai eliminato il 10 nei for e hai usato al suo posto c ...

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.