|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Mar 2001
Messaggi: 53
|
[C] Segmentation Fault(Core Dumped)
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? Codice:
#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);
}
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Codice:
--- 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)
{
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
amo il comando diff
__________________
Gnu/Linux User
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Mar 2001
Messaggi: 53
|
grazie per l'analisi sensine...
Ora funziona tutto correttamente... Posso sapere che hai usato? |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Per cosa?
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Quote:
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Apr 2002
Città: Vigevano(PV)
Messaggi: 2124
|
Quote:
Su linux basta un man diff e man patch
__________________
Gnu/Linux User
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:05.



















