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:
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.#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; }
A ver si alguien pudiese echarme un cable :(