Я пытаюсь распределить память динамически для arg_struct. Если я просто выделил его в стеке, он работает правильно, но не динамически. Динамически он печатает строку в основной функции, но когда она передается функции потока, она не работает. Любые идеи относительно того, почему это не работает?Выделение структуры кучи и стека: Pthread_create
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
struct arg_struct {
int *arg1;
char *str;
};
void *print_the_arguments(void *arguments)
{
struct arg_struct *args = (struct arg_struct *)arguments;
printf("The result is : %s\n",args->str);
pthread_exit(NULL);
return NULL;
}
int main()
{
pthread_t some_thread;
struct arg_struct *args = malloc(sizeof(struct arg_struct));
//struct arg_struct args; // uncommenting this and args.str WORKS (prints to thread function)
args->str = malloc(sizeof(char)*6);
args->str = "hello";
//args.str = "hello";
printf("printing from main: %s\n", args->str); // Prints here but not in other function
if (pthread_create(&some_thread, NULL, &print_the_arguments, (void *)&args) != 0) {
printf("Uh-oh!\n");
return -1;
}
return pthread_join(some_thread, NULL); /* Wait until thread is finished */
}
Это: 'args-> str = malloc (sizeof (char) * 5); args-> str = "hello"; 'выделяет пять байтов (когда вам кажется, что нужно 6), а затем сразу же теряет эту память, когда вы присваиваете что-то еще' args-> str'. –
В будущем удалите эти номера строк перед отправкой. – hauzer