Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Violacion del segmento ('core 'generado)

Estas en el tema de Violacion del segmento ('core 'generado) en el foro de C/C++ en Foros del Web. Hola buenas tarde estoy haciendo una aplicación cliente/servidor sencilla utilizando ONC-RPC y utilizando las rutinas de la capa intermedia, esta tiene que doblar el numero ...
  #1 (permalink)  
Antiguo 27/03/2013, 09:29
 
Fecha de Ingreso: marzo-2013
Ubicación: Merida
Mensajes: 2
Antigüedad: 11 años, 8 meses
Puntos: 0
Violacion del segmento ('core 'generado)

Hola buenas tarde estoy haciendo una aplicación cliente/servidor sencilla utilizando
ONC-RPC y utilizando las rutinas de la capa intermedia, esta tiene que doblar el numero que se le pase por parámetro. Me da una violación de segmento core los tres codigos que tengo son los siguientes:

calculo.h

Código:
 #define PROGRAMA2 0X20000002
#define VERSION2 1
#define SUMA 1
#define RESTA 2
#define DOBLAR 3
clientesuma.c

Código:
#include <stdlib.h>
#include <stdio.h>
#include <rpc/rpc.h>
#include "calculo.h"

int main (int argc,char * argv[])
{
int num= atoi(argv[1]) ;
	static int resultado;
	
	callrpc("localhost",PROGRAMA2,VERSION2,DOBLAR,xdr_int,&num,xdr_int,&resultado);
	printf("doblar=%d\n",&resultado);
}
servidorsuma.c
Código:
#include <stdlib.h>
#include <stdio.h>
#include "calculo.h"
#include <rpc/rpc.h>


int * doblar(int numero)
{
	static int resul;

	resul= numero*2;

printf("%d\n",numero);
	return &resul;
}

int main (int argc,char * argv[])
{
registerrpc(PROGRAMA2,VERSION2,DOBLAR,doblar,xdr_int,xdr_int);

svc_run();
}
Haber si veis donde tengo el error os lo agradecería mucho
  #2 (permalink)  
Antiguo 27/03/2013, 15:28
 
Fecha de Ingreso: julio-2012
Mensajes: 375
Antigüedad: 12 años, 5 meses
Puntos: 28
Respuesta: Violacion del segmento ('core 'generado)

Código:
int * doblar(int numero)
{
	static int resul;

	resul= numero*2;

printf("%d\n",numero);
	return &resul;
}
No me acaba de convencer del todo, en parte porque cada vez que llames a la función. Perderas el resultado anterior.

No sería más fácil:

Código:
int  doblar(int numero)
{
	int resul;

	resul= numero*2;

printf("%d\n",numero);
	return resul;
}
Oo
  #3 (permalink)  
Antiguo 27/03/2013, 19:17
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 12 años, 6 meses
Puntos: 127
Respuesta: Violacion del segmento ('core 'generado)

De principio tienes un error de lógica. Si pretendes retornar un puntero, debes retornar un puntero y no una dirección de memoria.

Que los punteros apunten a una dirección de memoria no significa que sean inherentemente una dirección de memoria, sino que son punteros, ergo has de crear primero el puntero.

Código C++:
Ver original
  1. int * doblar(int numero)
  2. {
  3. static int resul;
  4. resul= numero*2;
  5. int * resulpunt = &resul;
  6. printf("%d\n",numero);
  7. return resulpunt ;
  8. }
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor
  #4 (permalink)  
Antiguo 30/03/2013, 05:24
 
Fecha de Ingreso: marzo-2013
Ubicación: Merida
Mensajes: 2
Antigüedad: 11 años, 8 meses
Puntos: 0
Respuesta: Violacion del segmento ('core 'generado)

muchas gracias ya lo solucione
  #5 (permalink)  
Antiguo 29/11/2013, 13:16
 
Fecha de Ingreso: noviembre-2013
Mensajes: 1
Antigüedad: 11 años
Puntos: 0
Respuesta: Violacion del segmento ('core 'generado)

Hola.

Yo tengo un problema parecido creando un pequeño programa con mulithreads.

Mi codigo es este y no entiendo biien el fallo

int main()
{
/*
* Put your test code here.
*/

unsigned int n2=0;


void spawnThreads( unsigned int n );

printf("MAIN-par: Enter the number of threads (0 to 255): ");
scanf(" %d", &n2);
spawnThreads( n2 );



return 0;
}




void spawnThreads( unsigned int n )
{
/* your code goes here */
int n2=(int)n;
pthread_t thread_id[n2];
int i, j;

for(i=0; i < n2; i++)
{
pthread_create( &thread_id[i], NULL, thread_function, NULL );
}

for(j=0; j < n2; j++)
{
pthread_join( thread_id[j], NULL);
}





/* avoid 'unused parameter' warning */
(void)n;
}



void *thread_function(void *arg)
{
char *str;
str=(char*)arg;
printf("%s\n",str);
printf("Thread number %ld\n", pthread_self());
pthread_mutex_lock( &mutex1 );
counter++;
pthread_mutex_unlock( &mutex1 );
return NULL;
}

Me sale el mismo fallo y no entiendo porque es el objetivo es crear un programa que imprima por pantalla los tip de los threads. Lo ejecuto en consola y me sale: Violación de segmento (`core' generado)

Necesito ayuda. Gracias

Etiquetas: core, int, programa, segmento
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 01:17.