Volver 3DG > Informática y Tecnología > Software > Programación
Registrarse FAQ Listar Miembros

Programación >  

[C] Violacion de segmento en Linux al ejecutar

Participa en el tema [C] Violacion de segmento en Linux al ejecutar en el foro Programación



Sección Descargas Online - Bajá las últimas demos, mods y patches
Discusión cerrada
 
LinkBack (1) Herramientas Modo de visualización
Viejo 13-09-08, 12:45 AM   #1
Totalmente fumado
 
Avatar de RaMoNeS 3.1
 
Registración: Jul 2005
Ubicación: #doom (Florida)
Mensajes: 23,087
[C] Violacion de segmento en Linux al ejecutar

Bueno, el tema es asi, mediante un makefile creo un ejecutable llamado Servidor, tiene un archivo de configuracion, config.txt en el que fiugra puerto e ip. El tema es que cuando cambio la ip, al ejecutar ./Servidor, tira "Violacion de segmento".

Alguna idea de por que puede ser que al editar el config.txt tire ese error?

Saludos y gracias
RaMoNeS 3.1 está desconectado  
Viejo 13-09-08, 01:22 AM   #2
Will & Spirit
 
Avatar de Dem0
 
Registración: Feb 2003
Ubicación: No Man's Land
Mensajes: 4,904
Re: [C] Violacion de segmento en Linux al ejecutar

No se puede deducir mucho solamente con eso, pero podría ser que te falte reservar memoria para realizar alguna de las tareas de manipulación de strings.
__________________
Citar:
Mensaje original enviado por Gold_Member
Me da verguenza haber nacido aca, decir que todavia me salva la sangre.
Citar:
Mensaje original enviado por Stradi Ver Mensaje
¿Sos productor de morcilla?
Dem0 está desconectado  
Viejo 13-09-08, 01:42 AM   #3
Luche y Vuelve
 
Avatar de od1000k
 
Registración: Jan 2003
Mensajes: 20,584
Re: [C] Violacion de segmento en Linux al ejecutar

Yo se que tus ejercicios de la facultad poseen codigo muy original que te va a llevar a ser millonario, pero es casi imposible que alguien te responda este tipo de problemas sin ver codigo.

Lo unicoq que se me ocurre a mi es que en una prueba escribas un ip mas corto y cuando pincha uno mas largo y como dice Demo estes reservando mal la memoria, pero en realidad pueden ser mil cosas
__________________
BT | Tte. Gral. Peron
BT - Primer y unico Tricampeon de BF1942 Argentina


Qué linda es la borrachera
porque de todo me olvido,
y hasta pienso en el patrón
y me parece un amigo.
od1000k está desconectado  
Viejo 13-09-08, 02:50 AM   #4
Advocatus Diaboli
 
Avatar de Dr.D
 
Registración: Feb 1984
Ubicación: Mi laboratorio secreto
Mensajes: 19,203
Re: [C] Violacion de segmento en Linux al ejecutar

Pone el código... total te vas a morir de SIDA antes de poder ver un mango...
__________________
Dura lex, sed lex.
Mi laboratorio secreto
Dr.D está desconectado  
Viejo 13-09-08, 12:47 PM   #5
Dr. Gregory House
- ex seek -
 
Avatar de ~ Hernan
 
Registración: Mar 2004
Mensajes: 7,338
Re: [C] Violacion de segmento en Linux al ejecutar

Pero yo no me voy a morir y estoy en el mismo grupo de él
Y si, se pincha cuando ponés una ip más larga.

Código:
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define CARACTERES_POR_LECTURA 1
#define LONG_MAX_LINEA 30

int Obtiene_Datos(char* ip)
{
int bytes; int archivo; 
char* msj; int puerto; char str[LONG_MAX_LINEA];
int i=0; int flag=1;
char buffer[CARACTERES_POR_LECTURA];
/*	El flag pasa a valer 0 si:
		al leer desde el archivo se obtiene una \ (indica fin de linea)
		si bytes, luego de read, vale 0 (o sea cuando es el EOF)
*/

archivo=open("config.txt",O_RDONLY);
bytes = read (archivo, buffer, sizeof(buffer));
while(bytes!=0)
	{
	while(flag && i<30)
		{
		str[i++]=buffer[0];
		bytes = read (archivo, buffer, sizeof(buffer));
		if(buffer[0]=='\\' || bytes==0)
		flag=0;
		}
	str[i]='\\';
	str[i+1]='\0';
	msj=strtok(str,":");
	if(strcmp(msj,"Ip servidor")==0)
		strcpy(ip,strtok(NULL,"\\"));
	else
		puerto=atoi(strtok(NULL,"\\"));
	i=0;
	flag=1;
	bytes = read (archivo, buffer, sizeof(buffer));
	}
close(archivo);
return puerto;
}
__________________
Citar:
Mensaje original enviado por Luisiño73 Ver Mensaje
loco tengo los pantalones abajo y la mano izquierda en la verga, no me pienso poner a buscar en 214012049 paginas, exijo fotos en el post siguiente, CARAJO!
Citar:
Mensaje original enviado por TRQARG! Ver Mensaje
Es plata en ladrillos que no se pierde a menos que algun peronista instale una villa cerca.
~ Hernan está desconectado  
Viejo 13-09-08, 05:06 PM   #6
Gracias IOmega666 :3
 
Avatar de LuiGGi
 
Registración: Apr 2003
Ubicación: Rosario
Mensajes: 4,841
Re: [C] Violacion de segmento en Linux al ejecutar

ahhh vos sos el que definiste una variable con el mismo nombre de una función!!!!!!11111
__________________
nosotros somos inmortales, somos gamers, tenemos muchas vidas, un gamer no muere, respawnea

Comunidad Gamer Argentina: facebook.com/group.php?gid=38506797092
LuiGGi está desconectado  
Viejo 13-09-08, 05:12 PM   #7
[z] Pasto
 
Avatar de Willar
 
Registración: Jul 2001
Ubicación: UBA - FCEN
Mensajes: 4,602
Re: [C] Violacion de segmento en Linux al ejecutar

Citar:
Mensaje original enviado por seek Ver Mensaje
Pero yo no me voy a morir y estoy en el mismo grupo de él
Y si, se pincha cuando ponés una ip más larga.

Código:
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define CARACTERES_POR_LECTURA 1
#define LONG_MAX_LINEA 30

int Obtiene_Datos(char* ip)
{
int bytes; int archivo; 
char* msj; int puerto; char str[LONG_MAX_LINEA];
int i=0; int flag=1;
char buffer[CARACTERES_POR_LECTURA];
/*	El flag pasa a valer 0 si:
		al leer desde el archivo se obtiene una \ (indica fin de linea)
		si bytes, luego de read, vale 0 (o sea cuando es el EOF)
*/

archivo=open("config.txt",O_RDONLY);
bytes = read (archivo, buffer, sizeof(buffer));
while(bytes!=0)
	{
	while(flag && i<30)
		{
		str[i++]=buffer[0];
		bytes = read (archivo, buffer, sizeof(buffer));
		if(buffer[0]=='\\' || bytes==0)
		flag=0;
		}
	str[i]='\\';
	str[i+1]='\0';
	msj=strtok(str,":");
	if(strcmp(msj,"Ip servidor")==0)
		strcpy(ip,strtok(NULL,"\\"));
	else
		puerto=atoi(strtok(NULL,"\\"));
	i=0;
	flag=1;
	bytes = read (archivo, buffer, sizeof(buffer));
	}
close(archivo);
return puerto;
}
ctrl+shift+f por favor

btw, no encuentro la declaracion de 'ip'.

No entiendo porque la gente sigue exparciendo el cancer de declarar las variables todas juntas antes de usarlas.
__________________
Citar:
Mensaje original enviado por El Oso Polar Ver Mensaje
No voy a aceptar una politica si no vamos a terminar con iPods.
Willar está conectado  
Viejo 13-09-08, 05:29 PM   #8
Serenity now
 
Avatar de Xuan
 
Registración: May 2003
Ubicación: el terreno del Atlántico a Los Andes, del verde Chaco a los hielos fueguinos.
Mensajes: 2,222
Re: [C] Violacion de segmento en Linux al ejecutar

ip es parametro

lo de las variables todas juntas es excusable, cuando curse esa materia nos pedian que compilemos con -ansi
__________________
La Meta es Alt.
Código:
intellisense 
	||
	\/
      code >> compile >>>>> run >>>>> success ;-)
	/\	||          ||		 
	^^	\/          \/
	^^    errors    errors 
	^^	\\	//
	^^	   google
	^^	      ||
	\\	      \/
	 \<<<<  copy N paste
Xuan está desconectado  
Viejo 13-09-08, 05:30 PM   #9
Luche y Vuelve
 
Avatar de od1000k
 
Registración: Jan 2003
Mensajes: 20,584
Re: [C] Violacion de segmento en Linux al ejecutar

Citar:
Mensaje original enviado por Willar Ver Mensaje
No entiendo porque la gente sigue exparciendo el cancer de declarar las variables todas juntas antes de usarlas.
Porque esa exigencia sigue sindo parte de la norma ISO que definio al C en el 90 (o por lo menos en esa decada).

Solo podes declarar al comienzo de un bloque.

Seek, de donde sale ese 30?

Xuan, cual es el problema de que te pidieran codigo ansi c?
__________________
BT | Tte. Gral. Peron
BT - Primer y unico Tricampeon de BF1942 Argentina


Qué linda es la borrachera
porque de todo me olvido,
y hasta pienso en el patrón
y me parece un amigo.
od1000k está desconectado  
Viejo 13-09-08, 05:45 PM   #10
CDL
Laucha
 
Registración: Oct 2002
Ubicación: Floresta
Mensajes: 665
Re: [C] Violacion de segmento en Linux al ejecutar

Citar:
Mensaje original enviado por seek Ver Mensaje
Pero yo no me voy a morir y estoy en el mismo grupo de él
Y si, se pincha cuando ponés una ip más larga.

Código:
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#define CARACTERES_POR_LECTURA 1
#define LONG_MAX_LINEA 30

int Obtiene_Datos(char* ip)
{
int bytes; int archivo; 
char* msj; int puerto; char str[LONG_MAX_LINEA];
int i=0; int flag=1;
char buffer[CARACTERES_POR_LECTURA];
/*	El flag pasa a valer 0 si:
		al leer desde el archivo se obtiene una \ (indica fin de linea)
		si bytes, luego de read, vale 0 (o sea cuando es el EOF)
*/

archivo=open("config.txt",O_RDONLY);
bytes = read (archivo, buffer, sizeof(buffer));
while(bytes!=0)
	{
	while(flag && i<30)
		{
		str[i++]=buffer[0];
		bytes = read (archivo, buffer, sizeof(buffer));
		if(buffer[0]=='\\' || bytes==0)
		flag=0;
		}
	str[i]='\\';
	str[i+1]='\0';
	msj=strtok(str,":");
	if(strcmp(msj,"Ip servidor")==0)
		strcpy(ip,strtok(NULL,"\\"));
	else
		puerto=atoi(strtok(NULL,"\\"));
	i=0;
	flag=1;
	bytes = read (archivo, buffer, sizeof(buffer));
	}
close(archivo);
return puerto;
}
podrias postear cual es el formato del archivo de configuracion?
CDL está desconectado  


Discusión cerrada


Herramientas
Modo de visualización


LinkBacks (?)
LinkBack a este Tema: http://foros.3dgames.com.ar/programacion.97/482174.c-violacion-segmento-en-linux-al-ejecutar.html

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
Copyright 1999-2009 3DGames Argentina - Todos los derechos reservados.