problema con un programa de c

hola a todos

no se si este post va en este foro pero no se donde mas ponerlo la verdad...

es sobre un programa mio que tengo que entregar mañana, no se porque coño me dan segmentation fault (todo esto programando bajo linux) las expresiones del tipo: vector [contador+1] por ejemplo, pero el fallo es tal que hasta si aunmento antes el contador sigue dandolo, no me deja modificarlo >_< y yo estoy muy rayado ya, si alguien puede hecarme una mano...se lo agradeceria, por ceirto si teneis duda de lo que os digo, añadirle // a la lina donde se encuentra la expresionde ese tipoy vereis como el resto del programa furula., adjunto archivito

Adjuntos

No lo he probado porque pero te sales del rango del vector como que fijo.

path = (char*) malloc (PATH_MAX+1);


A ver:

¿Donde esta definida PATH_MAX? Porque no está definida en ningun sitio y así, en el peor de los casos si valiera 0, estas dejando 1 byte reservado para el vector

Además la linea correcta sería

path = (char*) malloc ( sizeof(char) * PATH_MAX+1 );


Prueba con eso ;)
path max esta definida en una libreria,segun el manual que tengo (fotocopias de un libro de editorial ra-ma), no recuerdo cual de las de arriba :S

un saludo y gracias ;););)
Pues mirate muy bien que la libreria donde este incluida no sea de turboc++ ni similares, porque entonces es como si no lo estuviese, yo solo usaria cosas ansi/iso 100%
Escrito originalmente por JomA
path max esta definida en una libreria,segun el manual que tengo (fotocopias de un libro de editorial ra-ma), no recuerdo cual de las de arriba :S


Llamándose PATH_MAX tiene toda la pinta de no ser una variable, sino una macro (¿se llama así?).

Así que haz una prueba usando sólo el preprocesador (-E) y lo confirmas (o no). Upps, ahora tengo un lapsus de memoria y no estoy seguro si se llama preprocesador. Es lo de menos. Mira:

$ echo "#define PATH_MAX 1000" > caca.h
$ gcc -E - << "FIN"
> #include "caca.h"
> PATH_MAX
> FIN
# 1 "<stdin>"
# 1 "<interno>"
# 1 "<l\355nea de orden>"
# 1 "<stdin>"
# 1 "caca.h" 1
# 2 "<stdin>" 2
1000


Ves, yo sí que estoy seguro que mi PATH_MAX es sustituido por 1000. Haz tu lo mismo pero en vez de hacer el include "caca.h" haz un include del archivo de cabecera donde esté definido PATH_MAX según tu libro.
pues weno,. wenas y malas noticias, la wena es que probe ese mismo programa sin cambiar anda en otro pc (de mi clase) y tira pa'lante, la pregunta es, poruqe linux suele hacerme estas cosas? en clase tb me pasa que no furula mi programa por segmentation fault, lo pruebo en otro y tira... de hehco tengo que programar en otro pc por medio de telnet en clase. ahora lo curioso es que segui el programa y ahora lo que ahce es que aparte de no entrar en algunos if porque no le da la gana, no me deja ejecutar el programa sino en un archivo en concreto, si le paso por parametro cualquier otro, no tira, XDDD y es que linux es asi, ahora estoy en clase, esta tarde en casa lo mirare a ver y ya os contare..

bien sufrimos los programadores principiantes en UNIX [triston]
Si programases todo siguiendo el ansi/iso lo que programas en windows, en unix funcionaria PERFECTAMENTE. es una sugerencia q te podra salvar de muchos quebraderos de cabeza.
$ man getcwd

Ahí te viene bien explicado lo que quieres hacer ;)

Usa siempre el estándar, que para eso está. Si programases siempre con el estándar, no tendrías problemas ni en Unix ni en ningún sitio. En cambio, los compiladores de MS se suelen tragar muchas cosas de más. Pensarás que eso es mejor (¿de donde vienen los pantallazos azules? XD), pero es precisamente lo contrario.
7 respuestas