Я пытаюсь реализовать динамический c стек в C. Вот код:
void **x; // global database
void*
pop() {
void *a = x[1];
int *b = (int*)(&a[0]);
int c = *b;
void *d = ((void**)&a)[c];
((int*)&a)[0] = c - 1;
return d;
}
void
push(void *d) {
void *a = x[1];
int *b = (int*)(&a[0]);
int c = *b + 1;
((void**)&a)[c] = d;
((int*)&a)[0] = c;
}
void
init() {
void **a; // this var can be ignored for this question.
void **b; // this is the one I'm dealing with.
a = malloc(sizeof(void*) * 100);
b = malloc(sizeof(void*) * 100);
x = malloc(sizeof(void*) * 10000);
a[0] = (0);
b[0] = (0); // it is a stack, but the first item in the array
// is the size of the stack.
// the stack is otherwise of arbitrary elements.
x[0] = a;
x[1] = b;
}
int
main(int argc, char **argv) {
init();
push(argv);
char **a = pop();
puts((char*)(a[0]));
}
По сути, я просто хочу положить sh argv
в стек и вытащить его.
Затем я хочу войти в один из элементы (или все это в любом случае).
В зависимости от того, как я настраиваю указатели, ведется запись либо пустым, либо пустым. Как мне заставить это работать?