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 :(