我想知道我在這裏做錯了什麼?我將void指針轉換爲結構緩衝區,並且只打印出垃圾。現在不應該緩衝指向指向我們爲內存分配的原始緩衝區的指針嗎?主題和指針C
#include <stdio.h>
#include <pthread.h>
struct buffer{
int a;
char *string[];
}buffer;
void thread1_function(void *ptr){
struct buffer *buffer=(struct buffer*)ptr;
printf("hello world\n");
printf("%s-%n\n", buffer->string,buffer->a);
}
int main(){
struct buffer *buffer;
int err;
buffer = (struct buffer*)malloc((11*sizeof(char))+sizeof(int));
pthread_t thread1;
sprintf(buffer->string,"%s","strint");
buffer->a=1;
printf("main: %s - %d\n",buffer->string,buffer->a);
err = pthread_create(&thread1, NULL, thread1_function, &buffer);
printf("error: %d\n",err);
pthread_join(thread1,NULL);
return 0;
}
〜
+ 1用於發現它,這很可能是原因,但分配仍需要修復。 – 2012-04-04 07:28:58
[線程調試使用libthread_db所啓用] 主:strint - 1 [新主題0xb7fe3b70(LWP 24311)] 錯誤:0 世界你好 計劃接收信號SIGSEGV,分割過錯。 [切換主題0xb7fe3b70(LWP 24311)] 0x0018f5c9在_IO_vfprintf_internal(S = 0x1,則格式= <優化掉>,AP = 0xb7fe337c 「$ \ 200 \ 001」)在vfprintf.c:1622 vfprintf.c : 無此文件或目錄。 \t in vfprintf.c (gdb) – 2012-04-04 07:36:42
發現另一個錯誤,並編輯我的答案。 – user1252434 2012-04-04 07:47:06