У меня есть указатель на структуру list* ptr
Структура содержит символ и указатель на следующую структуру, и они используются для массива структур, таких как:
list array[setSize]; //setSize is defined as 20
Без использования malloc,Мне нужно инициализировать list* ptr
, чтобы он содержал все элементы массива.
Я попробовал следующее, и я получил ошибку сегментации.Я считаю, что совершенно не понимаю, как работают указатели.(Я давно не трогал C)
int j = 0;
ptr = sizeof(array[j]); //i was thinking this would allocate space
for(j; j < setSize; j++)
array[j].next = array[j+1].next;
ptr = array; //i thought this would point to the beginning of the array
Я просмотрел множество сайтов о C и связанных списках.У меня были книги, но они не дают достаточно подробностей об этом конкретном использовании указателей или структур.Я пытался это некоторое время, но я уверен, что что-то упустил.
Мне просто нужно понять, где я иду не так и в каком направлении идти.
Спасибо за любые ився помощь.
Ниже приведен повторный пост с большим кодом:
//this should initialize array so that ptr contains all array elements
void initialize ( list array[] ) {
int j;
for(j = 0; j < setSize - 1; j++){
array[j].next = array[j+1].next; //using the & does not seem to work, so I don't use it
array[j].next = NULL;
}
ptr = &(array[0]);
}
Позже я использую это в своей собственной функции malloc (гдепроисходит сбой сегмента)
//this should allocate a new list cell in array
list* my_malloc () {
list* temp;
temp = ptr;
if(ptr = 0) {printf("Empty!\n"); return;}
else{ //the next line creates the seg fault
ptr = (*ptr).next;
}
return temp;
}
list* cell ( char n, list* next ) {
list* x = my_malloc();
x->value = n;
return x;
x->next = next;
return x;
}
main ( void* argv, int argc ) {
initialize(array);
list* x = nil;
char ch = a;
int i;
for ( i = 0; i < setSize; i++ )
x = cell(ch,x);
for ( i = 0; i < 10; i++ ) {
list* y = x->next;
my_free(x); //this is my own free function
x = y;
};
for ( i = 0; i < 10; i++ )
x = cell(ch,x);
}