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

Problema con Codigo C++ en linux.

Estas en el tema de Problema con Codigo C++ en linux. en el foro de C/C++ en Foros del Web. Hola a todos, me presento brevemente. Soy estudiante, nuevo en este foro. No soy muy bueno para esto de los foros, pero esta vez no ...
  #1 (permalink)  
Antiguo 22/04/2008, 12:50
Avatar de Krenliance  
Fecha de Ingreso: abril-2008
Mensajes: 5
Antigüedad: 16 años
Puntos: 0
Problema con Codigo C++ en linux.

Hola a todos, me presento brevemente. Soy estudiante, nuevo en este foro. No soy muy bueno para esto de los foros, pero esta vez no me quedo mas opcion.
Explico un poco; estoy aprendiendo esto del C++ y nos dieron un trabajo, calcular el PageRank(Rankeo de paginas que usa google) mediente un programa de C++.
Como mi PC es media viejita y tiene poca memoria, no tengo Linux instalado y tuve que hacer el programa en Dev-C++. Todo OK en el momento en que lo logre terminar , compilar y ejecutar, pero... cuando llego al laboratorio de clases y lo trato de correr en Linux me lanza error. =(
Le he dado mil y una vueltas al codigo y no he podido pillar el error.
Se que el codigo puede ser tedioso, pero en este momento son mi unica salvacion, el trabajo se entrega el Lunes y ya no se que podria estar fallando.
Si alguno de ustedes puede hecharme una mano, le estare muy agradecido. Ademas, aunque sea poco, pero creo que devolvere el favor ayudando aca en el foro a gente que sepa menos que yo.

Sin mas, aca va el codigo:
http://www.gigasize.com/get.php?d=2wkggwrnjdd (No me deja postearlo como Link, porque me cree la cuenta hoy)

Muchas gracias.
  #2 (permalink)  
Antiguo 22/04/2008, 21:13
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 2 meses
Puntos: 1360
Re: Problema con Codigo C++ en linux.

Lleva en codigo en y compilalo en la universidad.
Ya deberias de saber que los ejecutables de windows(exe) son diferentes de los linux (binarios)
  #3 (permalink)  
Antiguo 23/04/2008, 10:31
Avatar de Krenliance  
Fecha de Ingreso: abril-2008
Mensajes: 5
Antigüedad: 16 años
Puntos: 0
Re: Problema con Codigo C++ en linux.

Si, y ese es mi problema. Como digo, tengo el codigo fuente y al compilarlo en los PC del laboratorio de la universidad es cuando me lanza el error.
Sale "Fallo de Segmentacion". Pensamos que podia ser problema de capacidad de memoria, pero no. Tal vez estoy tratando de acceder a espacio de memoria no accesible o privado, pero no he logrado pillar la falla. Me parece que las librerias que uso estan disponibles y son suficientes para el codigo. Ya estoy empezando a desesperarme porque veo que mi calificacion sera horrible... y eso que me llevo bastante trabajar en el codigo.
  #4 (permalink)  
Antiguo 23/04/2008, 11:00
Avatar de aloqui  
Fecha de Ingreso: diciembre-2007
Mensajes: 973
Antigüedad: 16 años, 5 meses
Puntos: 24
Re: Problema con Codigo C++ en linux.

Para que no tengas el mismo problema en el futuro, te voy a recomendar CYGWIN.
Es un entorno UNIX integrado en windows, requiere muy poca memoria y solo te necesitas descargar las partes que vayas a usar.
Con él abrirás una (o las que necesites) ventana windows que será una ventana de comandos de un sistema UNIX disponible en tu PC, con los tipicos comandos disponibles: ls, tar, cp, find, cc, make, etc.
Tendrá acceso a todos los recursos de tu PC (ficheros, memoria, pantalla, etc.) y con él podrás compilar y ejecutar programas desarrolados en C++.
__________________
Grupos de Música
Pop Music Stars
  #5 (permalink)  
Antiguo 24/04/2008, 07:42
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Problema con Codigo C++ en linux.

Cita:
Iniciado por Krenliance Ver Mensaje
Si, y ese es mi problema. Como digo, tengo el codigo fuente y al compilarlo en los PC del laboratorio de la universidad es cuando me lanza el error.
Sale "Fallo de Segmentacion". Pensamos que podia ser problema de capacidad de memoria, pero no. Tal vez estoy tratando de acceder a espacio de memoria no accesible o privado, pero no he logrado pillar la falla. Me parece que las librerias que uso estan disponibles y son suficientes para el codigo. Ya estoy empezando a desesperarme porque veo que mi calificacion sera horrible... y eso que me llevo bastante trabajar en el codigo.
Eso es una excepcion seguro (acceso a memoria incorrecto muy probablemente), depura el programa (gdb). De otra manera pega el codigo, no hay otra forma de que te ayudemos.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #6 (permalink)  
Antiguo 24/04/2008, 12:04
Avatar de Krenliance  
Fecha de Ingreso: abril-2008
Mensajes: 5
Antigüedad: 16 años
Puntos: 0
Re: Problema con Codigo C++ en linux.

/*
BUENO, ACA ESTA EL CODIGO, LO HABIA SUBIDO EN UN .RAR PARA NO DESORDENAR EL POST, PERO TAL VEZ ASI PUEDAN VER LA FALLA. PROBABLEMENTE PARA USTEDES SALTE A LA VISTA, PERO A MI NI POR DONDE LO BUSQUE LO ENCUENTRO. GRACIAS:
*/
////////////////////////////////////////////////


#include <iostream>
using namespace std;



typedef struct nodoA *PunteroA;
typedef struct nodoB *PunteroB;
int OP=0;

struct nodoA{
PunteroA next;
PunteroB que_me_apunta;
int page_number;
};

struct nodoB{
PunteroB down;
int page;
};
//La clase ListaGeneralizada y sus metodos, cada pagina sera representada por un nodo A
//y estan enlazados entre si. Cada nodo A ademas esta "comunicado" con todas las paginas
//que le apuntan que se representan con nodos B.
class ListaGeneralizada{
public:
PunteroA Primero;
PunteroA Buscador;
PunteroB Contador;
public:
ListaGeneralizada(){
Primero=NULL;
Buscador=NULL;
Contador=NULL;
}
void Insertar_nodoA(int nr_pagina){
PunteroA aux;
aux= new (nodoA);
if(Primero==NULL){
Primero=aux;
Buscador=aux;
aux->page_number=nr_pagina;
aux->next=NULL;
aux->que_me_apunta=NULL;
}
else{
Buscador->next=aux;
Buscador=aux;
aux->page_number=nr_pagina;
aux->next=NULL;
aux->que_me_apunta=NULL;
}
}

void Insertar_nodoB(int nr_pagina){
PunteroB aux;
aux=new (nodoB);
if(Buscador->que_me_apunta==NULL){
Buscador->que_me_apunta=aux;
aux->down=NULL;
aux->page=nr_pagina;
}
else{
Contador=Buscador->que_me_apunta;
while(Contador->down!=NULL){
Contador=Contador->down;
}
Contador->down=aux;
aux->page=nr_pagina;
aux->down=NULL;
}
}

int Buscar_derecha(int nr_pagina){
PunteroA aux;
aux=Primero;
if(aux==NULL){
return 0;
}
while(aux->page_number!=nr_pagina&&aux->next!=NULL){
aux=aux->next;

}
if(aux->page_number==nr_pagina){
Buscador=aux;
return 1;
}
else{
Buscador=aux;
return 0;
}
}

int Contar_abajo(int pagina){
ListaGeneralizada::Buscar_derecha(pagina);
if(Buscador->que_me_apunta==NULL){return 0;}
else{
PunteroB aux;
int contar=0;
aux=Buscador->que_me_apunta;
while(aux->down!=NULL){
contar=contar+1;
aux=aux->down;
}
return contar;
}
}
void set_buscador(){
Buscador=Primero;
}
};

int main(int argc, char *argv[]){

int ID;
int pag;
float** tabla;
float** temp_tabla;
float d=0.85;
int index=0;
int i,k;
int j=0;
float PR=0;
float delta=1;
int C=0;
int n;
char c;
int IDid=0;
int paginas=0;
char salida[30] = "Salida(PageRank).txt";
float calc;



//Vamos a construir la lista generalizada mientras leemos el archivo. Ademas
//almacenaremos informacion util en un arreglo dinamico de dos dimensiones
//llamado tabla.

ListaGeneralizada lista;
while(scanf("%i",&n)==1){


if(IDid==0){
pag=n;
if(j==0){
tabla=new float*[3];
for(i=0;i<3+1;i++){
tabla[i]=new float[pag];
}
j=pag;
}
if(pag>=j){
j=pag*2;
temp_tabla=new float*[3];
for(i=0;i<3+1;i++){
temp_tabla[i]=new float[j];
}
for(i=0;i<pag+1;i++){
for(k=0;k<4;k++){
temp_tabla[k][i]=tabla[k][i];
}
}
delete[] tabla;
tabla=new float*[j];
for(i=0;i<j+1;i++){
tabla[i]=new float[3];
}

tabla=temp_tabla;
}
tabla[0][pag]=pag;
index=index+1;
}
if(IDid==1){
ID=n;
if(lista.Buscar_derecha(ID)==0){

lista.Insertar_nodoA(ID);
lista.Insertar_nodoB(pag);
}
else{
lista.Buscar_derecha(ID);
lista.Insertar_nodoB(pag);
}
C=C+1;
}
if(scanf("%[ ]",&c)==1){
IDid=1;
}


if(scanf("%[\n]",&c)==1){
tabla[3][pag]=C;
C=0;
IDid=0;
}

}
if(lista.Buscador!=NULL){
while(lista.Buscador->next!=NULL){
lista.Buscador=lista.Buscador->next;
}
}
for(i=1;i<index+1;i++){
if(lista.Buscar_derecha(i)==0){
lista.Insertar_nodoA(i);
}
}


CONTINUA ABAJO....
  #7 (permalink)  
Antiguo 24/04/2008, 12:05
Avatar de Krenliance  
Fecha de Ingreso: abril-2008
Mensajes: 5
Antigüedad: 16 años
Puntos: 0
Re: Problema con Codigo C++ en linux.

//Calcularemos los Page Rank hasta cumplir las condiciones exigidas
for(i=0;i<index+2;i++){
tabla[1][i]=1/index;
}


while(delta>=0.001||delta<=-0.001){
delta=0;
lista.Buscador=lista.Primero;
for(i=0;i<index;i++){
PR=0;
lista.Contador=lista.Buscador->que_me_apunta;
if(lista.Contador!=NULL){
while(lista.Contador!=NULL){
PR=(tabla[1][lista.Contador->page]/tabla[3][lista.Contador->page])+PR;
lista.Contador=lista.Contador->down;
}
}

PR=(1-d)+(d*PR);
tabla[2][lista.Buscador->page_number]=PR;
delta=(tabla[2][lista.Buscador->page_number]-tabla[1][lista.Buscador->page_number])+delta;
lista.Buscador=lista.Buscador->next;
//cout<<delta<<endl;
}

for(i=0;i<index+1;i++){
tabla[1][i]=tabla[2][i];
}
}



//Imprimimos el archivo de salida
FILE *Salida;
Salida = fopen(salida,"w");
fprintf( Salida, " Pagina:\tPageRank:\n");
fprintf( Salida, "--------------------------------------\n");

for(i=1;i<index+1;i++){
calc=tabla[1][i];
fprintf( Salida, "\t%i:\t%f\n",i,calc );
}
fclose (Salida);
}
  #8 (permalink)  
Antiguo 26/04/2008, 12:26
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Problema con Codigo C++ en linux.

Mi culpa, no vi el enlace (igual tendrias que haberme referido al mismo en lugar de copiar el codigo).

Por lo pronto esto esta mal:
Código:
tabla=new float*[3];
for(i=0;i<3+1;i++){
Los arrays empiezan en 0, vos estas reservando 3 float * y accediendo a un cuarto (cuando i es 3 accedes a tabla[3]). Empeza a revisar todo eso ...
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 28/04/2008, 11:05
Avatar de Krenliance  
Fecha de Ingreso: abril-2008
Mensajes: 5
Antigüedad: 16 años
Puntos: 0
Re: Problema con Codigo C++ en linux.

Gracias por la ayuda.
De todos modos, cuando hice unos arreglos de cosas que no andaban bien, como seguramente les sucede a ustedes tambien, saltaron mas errores...
Por suerte me dedique este fin de semana y ya lo tengo listo.
Claramente estaba accediendo a memoria no especificada como me dices, eso no lo habia notado.

Por si alguien alguna vez necesita un codigo similar (calculo de pagerank), el mio esta disponible, no para copias, que no es la idea, pero al menos a veces leer otro codigos nos dan ideas buenas.
Ahora a dedicarse al parsing, que mi profesora esta decidida a que terminemos con un mini-google. Hahaha

Eso por ahora.
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 06:00.