2010-12-23 63 views
0


我有這樣的警告「警告:分配從兼容的指針類型 」在這一行:指針結構/線程內

data1->transformed_block[l] = &transformed_block[l]; 

-

void print_message_function (void *ptr) 
{ 
    dt *data; 
    data = (dt *) ptr; 
    printf("Dentro da thread Numero0: %ld\n", data->L_norm_NewBlock); 
    pthread_exit(0); 
} 

typedef struct data_thread 
{ 
    long L_norm_NewBlock; 
    int Bsize_X;  
    int Bsize_Y; 
    int *transformed_block[MAX_LEVEL]; 
    long L_norm_OrigBlock;  
} dt; 

void function() 
{ 
    int *transformed_block[MAX_LEVEL]; 
    pthread_t thread1; 
    dt *data1; 
    pthread_attr_t attr; 
    pthread_attr_init(&attr); 

    //Fills structure 
    data1 = (dt *) malloc(sizeof(dt));  
    data1->transformed_block[l] = &transformed_block[l]; 

    data1->L_norm_NewBlock=0; 
    data1->Bsize_Y = Bsize_Y; 
    data1->Bsize_X = Bsize_X; 

    pthread_create(&thread1, &attr, (void *) &print_message_function, (void *) &data1); 
} 

我想擺脫該警告以及我在線程中獲得的值都是錯誤的。例如data1-> L_norm_NewBlock = 0;在線程中引導我一個不同的值(不是0應該是這樣)。

+0

請使用** {} **按鈕格式化您的代碼。 – Rod 2010-12-23 16:35:00

+0

我無法知道其中transformed_block(不在結構中的那個)被聲明。這是全球性的嗎?它是什麼類型? – 2010-12-23 16:40:36

回答

0

線程內的值現在沒問題。我擦除在該函數的&

在pthread_create(&線程1,& ATTR,(無效*)& print_message_function,(無效*)& DATA1);

在pthread_create(&線程1,& ATTR,(無效*)& print_message_function,(無效*)DATA1);

但我仍然沒有擺脫那個警告......

1

什麼是transformed_block?假設它與結構體中定義的變量相同,則試圖將第1個元素(指向int指針的指針)的地址指定給data1-> transformed_block(指向int的指針)的第l個元素。

data1->transformed_block[l] = &transformed_block[l]; 
// int* = &(int*) 

難道你不是在簡單地嘲笑嗎?

data1->transformed_block[l] = transformed_block[l]; 
0

你有一個整型數組的指針在你的結構,並宣佈在你的函數的局部變量,但是你從來沒有給它分配給指向任何東西。

如果你想在函數()中擁有一個本地數組,你應該聲明int transform_block [MAX_LEVEL],而不是int * transform_block [MAX_LEVEL]。這應該會讓警告消失。

void function() 
{ 
int transformed_block[MAX_LEVEL]; pthread_t thread1; 
// * removed from above line 
dt *data1; 
...