PDA

View Full Version : [C] Segmentation Fault(Core Dumped)


Dark_Tranquillity
07-05-2004, 17:48
Ho quest'ormai famosissimo programma. Lo compilo, mi viene compilato senza errori ma al momento che lo richiamo a un certo punto si blocca.
Qualcuno mi są dire come faccio a trovare l'errore?

#include <stdio.h>
#include <malloc.h>

/* PROTOTIPO FUNZIONI */
void scambia_righe(int **m, int size, int r1, int r2, int start);
void det(int **m, int size, int *risultato, int start);

main()
{
int **m, n;
int i, j, risultato;

printf("Inserisci la dimensione n: ");
scanf("%d", &n);

if (!(m = (int **)malloc(n*n*sizeof(int))))
abort();

for(i=0; i<n; ++i)
for(j=0; j<n; ++j)
{
printf("Inserisci il valore dell'elemento (%d,%d): ", i+1, j+1);
scanf("%d", &m[i][j]);
}

det(m, n, &risultato, 0);
printf("Determinante: %d", risultato);
return 0;
}

void scambia_righe(int **m, int size, int r1, int r2, int start)
{
int i, tmp;
for(i=start; i<size; ++i)
{
tmp = m[r1][i];
m[r1][i] = m[r2][i];
m[r2][i] = tmp;
}
}

void det(int **m, int size, int *risultato, int start)
{
int r;
int sgn = 1;
int det_min;
*risultato = 0;

if(start == (size - 1))
*risultato = m[size-1][size-1];

for(r=start; r<size; ++r)
{
if(r != start)
{
sgn = -1;
scambia_righe(m, size, start, r, start);
}

det(m, size, &det_min, start+1);
*risultato += sgn * m[start][start] * det_min;

if(r != start)
scambia_righe(m, size, start, r, start);
}
}

ilsensine
07-05-2004, 17:55
--- sf.c.org 2004-05-07 18:06:10.000000000 +0200
+++ sf.c 2004-05-07 18:08:06.000000000 +0200
@@ -1,11 +1,11 @@
#include <stdio.h>
-#include <malloc.h>
+#include <stdlib.h>

/* PROTOTIPO FUNZIONI */
void scambia_righe(int **m, int size, int r1, int r2, int start);
void det(int **m, int size, int *risultato, int start);

-main()
+int main()
{
int **m, n;
int i, j, risultato;
@@ -13,9 +13,11 @@
printf("Inserisci la dimensione n: ");
scanf("%d", &n);

- if (!(m = (int **)malloc(n*n*sizeof(int))))
+ if (!(m = (int **)malloc(n*sizeof(int *))))
abort();
-
+ for(i=0; i<n; ++i)
+ if(!(m[i] = (int *) malloc(n*sizeof(int))))
+ abort();
for(i=0; i<n; ++i)
for(j=0; j<n; ++j)
{

Luc@s
07-05-2004, 17:59
amo il comando diff :D

Dark_Tranquillity
07-05-2004, 18:20
grazie per l'analisi sensine...
Ora funziona tutto correttamente...
Posso sapere che hai usato?

ilsensine
07-05-2004, 18:22
Per cosa?

ilsensine
07-05-2004, 18:25
Originariamente inviato da Dark_Tranquillity
sensine...

killall -BAN Dark_Tranquillity :huh:

Luc@s
07-05-2004, 18:25
Originariamente inviato da Dark_Tranquillity
grazie per l'analisi sensine...
Ora funziona tutto correttamente...
Posso sapere che hai usato?

ha usato il comando diff :D
Su linux basta un man diff e man patch