Как разыменовать несколько слоев двунаправленных указателей в C для реализации стека Dynami c? - PullRequest
0 голосов
/ 11 апреля 2020

Я пытаюсь реализовать динамический 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 в стек и вытащить его.

Затем я хочу войти в один из элементы (или все это в любом случае).

В зависимости от того, как я настраиваю указатели, ведется запись либо пустым, либо пустым. Как мне заставить это работать?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...