Problema in C
Problema in C
ciao a tutti, questa mattina ho avuto un problema con la compilazione ovvero quando compilo un esercizio la compilazione avviene in modo corretto viene eseguito anche l'esercizio nel momento in cui il compilatore deve stamparmi i dati mi da questo errore: Segmentation fault (core dumped)!
non so da cosa sia dovuto spero in un vostro aiuto grazie mille come sempre.
non so da cosa sia dovuto spero in un vostro aiuto grazie mille come sempre.
- Rospo Zoppo
- Rampante Reduce

- Messaggi: 5291
- Iscrizione: martedì 16 gennaio 2007, 20:35
Re: Problema in C
Di solito e' un problema con le variabili o con l'allocazione di memoria.. Magari hai sbagliato qualche scanf...
Re: Problema in C
non penso perchè su dev in windows mi funziona...praticamente io gli immetto i dati e quando deve stamparli mi da l'errore...non so pro proprio cosa sia
- Rospo Zoppo
- Rampante Reduce

- Messaggi: 5291
- Iscrizione: martedì 16 gennaio 2007, 20:35
Re: Problema in C
Potresti postare il codice al massimo....
Re: Problema in C
ok sono tre file diversi questo è il main.c :
#include
#include
#include "defns.h"
lista leggi(lista *lastpunt){
lista punt_lista;
int n, flag = 1;
do{
scanf("%d", &n);
if(n >= 0){
if(flag){
punt_lista = (lista)malloc(sizeof(struct nodo));
if(!punt_lista){
printf("Allocazione memoria non riuscita\n");
return NULL;
}
punt_lista->x=n;
punt_lista->next=NULL;
flag =0;
}
else
*lastpunt=inserisci(&punt_lista, n);
}
}while(n>=0);
return punt_lista; // restituisco la testa della coda
}
void stampa(lista L)
{
lista p;
printf( "[");
for(p=L; p!=NULL; p=p->next)
printf( "%d ", p->x );
printf( "]\n");
}
int main(void)
{
int i;
lista L[5], lastpunt,temppunt;
printf( "Inserisci la prima lista: ");
L[0]=leggi(&lastpunt);
printf( "Inserisci la seconda lista: ");
L[1]=leggi(&lastpunt);
L[2]=unione(L[0],L[1]);
L[3]=intersezione(L[0],L[1]);
L[4]=diffsim(L[0],L[1]);
printf( "L1=" );
stampa(L[0]);
printf("\nL2=");
stampa(L[1]);
printf("\nL1 unione L2=");
stampa(L[2]);
printf("\nL1 inters L2=");
stampa(L[3]);
printf("\nL1 diffsim L2=");
stampa(L[4]);
for(i=0; i
#include
#include "defns.h"
lista inserisci(lista *p_L, int x)
{
if( !*p_L || (*p_L)->x>x ) {
lista res=(lista)malloc(sizeof(struct nodo));
if( res ) {
res->x=x;
res->next=*p_L;
*p_L=res;
}
return res;
}
else return inserisci(&((*p_L)->next), x);
}
lista unione(lista L1, lista L2){
lista temp;
if((L1 == NULL) && (L2 == NULL)) return NULL;
else if((L1 == NULL) && (L2 != NULL))return L2;
else if((L1 != NULL) && (L2 == NULL))return L1;
while(L1 != NULL){
temp->x = L1->x;
temp = temp->next;
L1 = L1->next;
}
while(L2 != NULL){
temp->x = L2->x;
temp = temp->next;
L2 = L2->next;
}
return temp;
}
lista intersezione(lista L1, lista L2){
lista temp;
if((L1 == NULL) || (L2 == NULL)) return NULL;
else if(L1->x x)
return (intersezione(L1->next, L2));
else if(L1->x > L2->x)
return (intersezione(L1, L2->next));
else{
temp = malloc(sizeof(struct nodo));
temp->x = L1->x;
temp->next = intersezione(L1->next, L2->next);
return temp;
}
}
lista diffsim(lista L1, lista L2){
lista L;
if(L1 == NULL) return NULL;
else if((L2 == NULL) || (L1->x x)){
L = malloc(sizeof(struct nodo));
if(!L){
printf("Allocazione di memoria fallita");
return NULL;
}
L->x = L1->x;
L->next = diffsim(L1->next, L2);
return L;
}
else if(L1->x > L2->x)
return diffsim(L1, L2->next);
else
return diffsim(L1->next, L2->next);
}
void elimina(lista *p_L)
{
if( *p_L != 0 ) {
elimina( &((*p_L)->next) );
free(*p_L);
*p_L = 0;
}
}
questo è il file defns.h:
/*File defns.h*/
typedef struct nodo *lista;
struct nodo{
int x; /*Informazione*/
lista next; /*Puntatore al nodo successivo*/
};
/*Prototipi*/
lista inserisci(lista *p_L, int x);
void elimina(lista *p_L);
lista unione(lista L1, lista L2);
lista intersezione(lista L1, lista L2);
lista diffsim(lista L1, lista L2);
grazie mille ancora
#include
#include
#include "defns.h"
lista leggi(lista *lastpunt){
lista punt_lista;
int n, flag = 1;
do{
scanf("%d", &n);
if(n >= 0){
if(flag){
punt_lista = (lista)malloc(sizeof(struct nodo));
if(!punt_lista){
printf("Allocazione memoria non riuscita\n");
return NULL;
}
punt_lista->x=n;
punt_lista->next=NULL;
flag =0;
}
else
*lastpunt=inserisci(&punt_lista, n);
}
}while(n>=0);
return punt_lista; // restituisco la testa della coda
}
void stampa(lista L)
{
lista p;
printf( "[");
for(p=L; p!=NULL; p=p->next)
printf( "%d ", p->x );
printf( "]\n");
}
int main(void)
{
int i;
lista L[5], lastpunt,temppunt;
printf( "Inserisci la prima lista: ");
L[0]=leggi(&lastpunt);
printf( "Inserisci la seconda lista: ");
L[1]=leggi(&lastpunt);
L[2]=unione(L[0],L[1]);
L[3]=intersezione(L[0],L[1]);
L[4]=diffsim(L[0],L[1]);
printf( "L1=" );
stampa(L[0]);
printf("\nL2=");
stampa(L[1]);
printf("\nL1 unione L2=");
stampa(L[2]);
printf("\nL1 inters L2=");
stampa(L[3]);
printf("\nL1 diffsim L2=");
stampa(L[4]);
for(i=0; i
#include
#include "defns.h"
lista inserisci(lista *p_L, int x)
{
if( !*p_L || (*p_L)->x>x ) {
lista res=(lista)malloc(sizeof(struct nodo));
if( res ) {
res->x=x;
res->next=*p_L;
*p_L=res;
}
return res;
}
else return inserisci(&((*p_L)->next), x);
}
lista unione(lista L1, lista L2){
lista temp;
if((L1 == NULL) && (L2 == NULL)) return NULL;
else if((L1 == NULL) && (L2 != NULL))return L2;
else if((L1 != NULL) && (L2 == NULL))return L1;
while(L1 != NULL){
temp->x = L1->x;
temp = temp->next;
L1 = L1->next;
}
while(L2 != NULL){
temp->x = L2->x;
temp = temp->next;
L2 = L2->next;
}
return temp;
}
lista intersezione(lista L1, lista L2){
lista temp;
if((L1 == NULL) || (L2 == NULL)) return NULL;
else if(L1->x x)
return (intersezione(L1->next, L2));
else if(L1->x > L2->x)
return (intersezione(L1, L2->next));
else{
temp = malloc(sizeof(struct nodo));
temp->x = L1->x;
temp->next = intersezione(L1->next, L2->next);
return temp;
}
}
lista diffsim(lista L1, lista L2){
lista L;
if(L1 == NULL) return NULL;
else if((L2 == NULL) || (L1->x x)){
L = malloc(sizeof(struct nodo));
if(!L){
printf("Allocazione di memoria fallita");
return NULL;
}
L->x = L1->x;
L->next = diffsim(L1->next, L2);
return L;
}
else if(L1->x > L2->x)
return diffsim(L1, L2->next);
else
return diffsim(L1->next, L2->next);
}
void elimina(lista *p_L)
{
if( *p_L != 0 ) {
elimina( &((*p_L)->next) );
free(*p_L);
*p_L = 0;
}
}
questo è il file defns.h:
/*File defns.h*/
typedef struct nodo *lista;
struct nodo{
int x; /*Informazione*/
lista next; /*Puntatore al nodo successivo*/
};
/*Prototipi*/
lista inserisci(lista *p_L, int x);
void elimina(lista *p_L);
lista unione(lista L1, lista L2);
lista intersezione(lista L1, lista L2);
lista diffsim(lista L1, lista L2);
grazie mille ancora
- Rospo Zoppo
- Rampante Reduce

- Messaggi: 5291
- Iscrizione: martedì 16 gennaio 2007, 20:35
Re: Problema in C
Usa il tag codice se no non e' leggibile...
Re: Problema in C
File defns.h:
file liste.c:
file main.c:
grazie mille
Codice: Seleziona tutto
/*File defns.h*/
typedef struct nodo *lista;
struct nodo{
int x; /*Informazione*/
lista next; /*Puntatore al nodo successivo*/
};
/*Prototipi*/
lista inserisci(lista *p_L, int x);
void elimina(lista *p_L);
lista unione(lista L1, lista L2);
lista intersezione(lista L1, lista L2);
lista diffsim(lista L1, lista L2);Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
#include "defns.h"
lista inserisci(lista *p_L, int x)
{
if( !*p_L || (*p_L)->x>x ) {
lista res=(lista)malloc(sizeof(struct nodo));
if( res ) {
res->x=x;
res->next=*p_L;
*p_L=res;
}
return res;
}
else return inserisci(&((*p_L)->next), x);
}
lista unione(lista L1, lista L2){
lista temp;
if((L1 == NULL) && (L2 == NULL)) return NULL;
else if((L1 == NULL) && (L2 != NULL))return L2;
else if((L1 != NULL) && (L2 == NULL))return L1;
while(L1 != NULL){
temp->x = L1->x;
temp = temp->next;
L1 = L1->next;
}
while(L2 != NULL){
temp->x = L2->x;
temp = temp->next;
L2 = L2->next;
}
return temp;
}
lista intersezione(lista L1, lista L2){
lista temp;
if((L1 == NULL) || (L2 == NULL)) return NULL;
else if(L1->x < L2->x)
return (intersezione(L1->next, L2));
else if(L1->x > L2->x)
return (intersezione(L1, L2->next));
else{
temp = malloc(sizeof(struct nodo));
temp->x = L1->x;
temp->next = intersezione(L1->next, L2->next);
return temp;
}
}
lista diffsim(lista L1, lista L2){
lista L;
if(L1 == NULL) return NULL;
else if((L2 == NULL) || (L1->x < L2->x)){
L = malloc(sizeof(struct nodo));
if(!L){
printf("Allocazione di memoria fallita");
return NULL;
}
L->x = L1->x;
L->next = diffsim(L1->next, L2);
return L;
}
else if(L1->x > L2->x)
return diffsim(L1, L2->next);
else
return diffsim(L1->next, L2->next);
}
void elimina(lista *p_L)
{
if( *p_L != 0 ) {
elimina( &((*p_L)->next) );
free(*p_L);
*p_L = 0;
}
}Codice: Seleziona tutto
#include <stdio.h>
#include <stdlib.h>
#include "defns.h"
lista leggi(lista *lastpunt){
lista punt_lista;
int n, flag = 1;
do{
scanf("%d", &n);
if(n >= 0){
if(flag){
punt_lista = (lista)malloc(sizeof(struct nodo));
if(!punt_lista){
printf("Allocazione memoria non riuscita\n");
return NULL;
}
punt_lista->x=n;
punt_lista->next=NULL;
flag =0;
}
else
*lastpunt=inserisci(&punt_lista, n);
}
}while(n>=0);
return punt_lista; // restituisco la testa della coda
}
void stampa(lista L)
{
lista p;
printf( "[");
for(p=L; p!=NULL; p=p->next)
printf( "%d ", p->x );
printf( "]\n");
}
int main(void)
{
int i;
lista L[5], lastpunt,temppunt;
printf( "Inserisci la prima lista: ");
L[0]=leggi(&lastpunt);
printf( "Inserisci la seconda lista: ");
L[1]=leggi(&lastpunt);
L[2]=unione(L[0],L[1]);
L[3]=intersezione(L[0],L[1]);
L[4]=diffsim(L[0],L[1]);
printf( "L1=" );
stampa(L[0]);
printf("\nL2=");
stampa(L[1]);
printf("\nL1 unione L2=");
stampa(L[2]);
printf("\nL1 inters L2=");
stampa(L[3]);
printf("\nL1 diffsim L2=");
stampa(L[4]);
for(i=0; i<5; i++)
elimina(L+i);
}
Re: Problema in C
Ma scusa, mi sembra ci sia un bel ciclo infinito...
Re: Problema in C
dove?visto che su devC mi funziona perfettamente!
Re: Problema in C
cosa vuol dire che funziona? non gai detto che dà segmentation fault?
se usi devc, non ti saprei dire molto...
con gcc puoi avviare il debugger a vedere quale istruzione di preciso và in fault
altrimenti digiti:
in questo modo si analizza il file core che è stato generato e ti può dare qualche informazione sulla causa del problema
saluti
(b2b)
se usi devc, non ti saprei dire molto...
con gcc puoi avviare il debugger a vedere quale istruzione di preciso và in fault
altrimenti digiti:
Codice: Seleziona tutto
gdb nomeprogramma coresaluti
(b2b)
Navigammo su fragili vascelli
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
per affrontar del mondo la burrasca
ed avevamo gli occhi troppo belli...
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 2 ospiti
