Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/11/2014, 04:18
DebianRDT
 
Fecha de Ingreso: noviembre-2014
Mensajes: 2
Antigüedad: 9 años, 5 meses
Puntos: 0
Problema con violación de segmento

Buenos días.

Tengo un pequeño problema con un programa que, al ejecutarlo, me manda una violación de segmento. Os adjunto el código y os comento sobre él.

Código:
#include <pthread.h>
#include <stdlib.h>
#include <stdio.h>
 
 
/*-------------------------------------
 *Programa creado por [email protected]
 *-------------------------------------
 **/
 
 
struct estructura {
 
    char * mensaje;
    int entero;
};
 
 
void * ejer6(void * arg) {
 
    printf("Entra dentro");
 
    struct estructura * turas;
    turas=(struct estructura *)arg;
 
    turas->entero=turas->entero+1;
    turas->mensaje[0]='9';
 
    printf("%d\n", turas->entero);
    printf("%s\n", turas->mensaje);
 
 
    pthread_exit(NULL);
}
 
 
 
int main(int argc, char ** argv) {
    if(argc!=2) {
        printf("Introduce el numero adecuado de parametros\n");
    }
    else {
 
        pthread_t h[argc];
        struct estructura turas[argc];
        int i;
 
        for(i=0; i<argc; i++) {
            turas[i].entero=13;
            turas[i].mensaje="Hola mundo";
        }
 
        for(i=0; i<argc; i++) {
 
            printf("\nEste es el valor de la estructura antes de la hebra: \n");
            printf("Entero: %d \n", turas[i].entero);
            printf("Mensaje: %s \n", turas[i].mensaje);
 
 
            pthread_create(&h[i], NULL, ejer6, (void *)&turas[i]);
            pthread_join(h[i], NULL);
 
            printf("\nEste es el valor de la estructura despues de la hebra: \n");
            printf("Entero: %d \n", turas[i].entero);
            printf("Mensaje: %s \n", turas[i].mensaje);
 
        }
    }
 
    return 0;
}
Bien, el caso es que entra en la función y me produce la violación de segmento al intentar acceder a la posición [0] del char * mensaje y ponerle el 9. Lo que me descoloca es que me da violación de segmento si trato de ponerle el '9' pero si intento hacer un printf de la posición 0 del char * me imprime 'H' por lo que sí está accediendo a la posición...seguramente sea una tontería que no esté viendo o no sé, pero que me tiene loco ya xD.

A ver si alguien pudiese echarme un cable :(