2012-04-06 5 views
0
typedef struct _ut_slot { 
    ucontext_t uc; 
    .... 
}*ut_slot; 

static ut_slot* table; //array of the structs 

void foo (int tab_size){ 
    table = malloc (tab_size *(sizeof (ut_slot))); // memory allocation for array of structs 
    for(i = 0 ; i < tab_size ; i++ ){ 
     getcontext(&table[i].uc); <--- ?????? 
     } 
} 

Я получаю ошибку в строке «getcontext». Как написать ссылку на любой элемент массива? И как я могу инициализировать командой «getcontext» поле «uc» каждого элемента массива?Getcontext() применяется к элементам массива с structs

ответ

0

У вас есть несоответствие с определением ut_slot и использовать его:

typedef struct _ut_slot { 
    ucontext_t uc; 
    .... 
}*ut_slot; //<--- pointer to struct 

Вы говорите, что ut_slot является указателем на структуру, то вы объявляете

статическая ut_slot * таблица ;

поэтому у вас есть указатель на указатель на структуру.

Возможно, вы хотите, чтобы ut_slot просто был структурой, или table, чтобы быть указателем на структуру.


Чтобы быть более точным: table это указатель на указатель на структуры, так table[i] является указателем на структуры, и вы пытаетесь получить доступ к члену структуры из не-структуры с table[i].ut , что вызывает ошибку компиляции.


Попробуйте следующее:

typedef struct _ut_slot { 
    ucontext_t uc; 
    .... 
} ut_slot; //removed "*" 

static ut_slot *table; 

остальная часть кода в порядке, и не должны быть изменены.

+0

Я редактирую свой комментарий. Как я могу получить доступ к правильному значению поля uc? – TatianaCooper

+0

Я понимаю, что вы объяснили. Теперь он работал: getcontext (& (* таблица [i]). Uc)); – TatianaCooper

+0

@TatianaCooper Подождите, ваш вызов malloc неверен, потому что sizeof (ut_slot) - это размер указателя (всего около 4 байт), а размер структуры - использование решения, которое я редактировал в – Anthales

0

Учебное пособие для getcontext выдвигает прототип, как это:

int getcontext(ucontext_t *ucp); 

Вы уверены, что вы передаете это правильный аргумент? ;)

Если вам действительно нужен массив структур, вы должны выделить некоторую память для каждого. Обратите внимание, как -> разыменования указателя и & получает адрес элемента struct. Это сбивает с толку и оглядывается назад.

Извините, я программирую без фигурных скобок и знаков препинания. Якорь C добавляет их автоматически.

#include <stdio.h> 
#include <stdlib.h> 
#include <ucontext.h> 
typedef struct _ut_slot 
    ucontext_t uc 
    ... 
*ut_slot 
static ut_slot *table 
int main void 
    static ucontext_t uc 
    table = malloc 1 * sizeof ut_slot 
    table[0] = malloc sizeof *ut_slot 
    getcontext &table[0]->uc 
    free table[0] 
    free table 
    return 0 
+0

Это как раз проблема. Я хочу передать нам поле элемента массива, и я не знаю, как его записать. – TatianaCooper

+0

спасибо! У меня была ошибка «Ошибка сегментации», прежде чем я изменил, как вы сказали. – TatianaCooper

Смежные вопросы