Neofita di C,Errore di segmentazione (core dump creato)

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
kisspachyousee
Prode Principiante
Messaggi: 31
Iscrizione: sabato 28 maggio 2011, 17:04

Neofita di C,Errore di segmentazione (core dump creato)

Messaggio da kisspachyousee »

Salve a tutti,
Sto cercando di fare qualche esercizio ma quando provo a compilare da terminale e poi eseguo il programma mi viene restituito l'errore "Errore di segmentazione (core dump creato)". Cosa sbaglio?

Codice: Seleziona tutto

/* Progettare un server che riceve come argomenti da linea di comando i nomi di due FIFO, *
 * in e out, da cui il programma legge e su cui il programma scrive, rispettivamente.     *
 * Il server riceve sull'input stream due linee che rappresentano due interi 'n' e 'm'    *
 * e scrive sull'output stream una linea che rappresenta il prodotto 'n * m'.             */

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>

#define MAX_SIZE 50

char *readline(int fd, char *buffer) {
    size_t res = 0;
    char c = 0;
    int i = 0;
    while (1) {
        res = read(fd, &c, 1);
        if (res < 0)
            return NULL;
        else if (res == 0 || c == '\n')
            break;
        buffer[i++] = c;

    }
    buffer[i] = '\0';
    return buffer;
}

int main(int  argc, char** argv) {
	mkfifo(argv[1], 0666);
	mkfifo(argv[2], 0666);
	int in = open(argv[1], O_RDONLY);
	int out = open(argv[2] ,O_WRONLY);
	
	char line[MAX_SIZE], text[MAX_SIZE];
	memset(line, 0, MAX_SIZE);
	int n, m;

	while (1) {
		if (readline(in, line)          &&
    		sscanf(line, "%d", &n) == 1 &&
    		readline(in, line)          &&
            sscanf(line, "%d", &m) == 1) {
                int result = n * m;
                sprintf(text, "%d", result);
                strcat(text, "\n");
        		write(out, text, strlen(text));
    	}
	}

	close(in);
	close(out);

	return 0;
}
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Neofita di C,Errore di segmentazione (core dump creato)

Messaggio da SuperStep »

quando esce core dump?
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
kisspachyousee
Prode Principiante
Messaggi: 31
Iscrizione: sabato 28 maggio 2011, 17:04

Re: Neofita di C,Errore di segmentazione (core dump creato)

Messaggio da kisspachyousee »

dopo che lo eseguo: prima lo compilo con gcc ./main.c poi eseguo il file che viene creato con ./a.out
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Neofita di C,Errore di segmentazione (core dump creato)

Messaggio da SuperStep »

a me va in loop nel while nella funzione readline (testato con gdb) quali dovrebbero essere le condizioni di uscita? che ha letto tutto il file con fd passato giusto? senza commenti non e' chiaro.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
Avatar utente
SuperStep
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 2037
Iscrizione: lunedì 19 dicembre 2011, 16:26
Desktop: Unity
Distribuzione: Ubuntu 16.04 LTS x86_64
Sesso: Maschile
Località: Somma Vesuviana (NA)

Re: Neofita di C,Errore di segmentazione (core dump creato)

Messaggio da SuperStep »

prova ad usare ddd con un po' di breakpoint, da li non esce...

https://lh6.googleusercontent.com/-dRrl ... 253A09.png

dopo 5 minuti a cliccare continua mi sono scocciato, rimane bloccata in quel while, rivedi le condizioni di uscita.
Ultima modifica di SuperStep il lunedì 23 giugno 2014, 18:58, modificato 1 volta in totale.
ubuntu 16.04 LTS 64-bit - Memoria: 31,3 Gib - Processore: Intel Core i7-5960X CPU @ 3.00 GHz × 16 - Grafica: AMD Radeon HD 7800 Series - Disco: SSD 256 GB x 4 (RAID 01)
kisspachyousee
Prode Principiante
Messaggi: 31
Iscrizione: sabato 28 maggio 2011, 17:04

Re: Neofita di C,Errore di segmentazione (core dump creato)

Messaggio da kisspachyousee »

si esatto!!
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 3 ospiti