在C中的结构中创建堆栈空间

时间:2014-11-09 21:12:12

标签: c struct stack

我有:

  typedef struct{
   int *stack;
   int *stack_ptr;
  }MyStruct;

然后我做的其他地方:

MyStruct *temp = malloc(sizeof(MyStruct));
temp->stack = malloc(1024) //allocate 1024 bytes
temp->stack_ptr = temp->stack;  //stack_ptr points to beginning of stack
temp->stack_ptr += 800;  //move stack_ptr down towards bottom of stack

我正在尝试理解调试器输出,我不认为这是正确的,但我无法确定。我只想在我的结构中有一个堆栈,然后在这个堆栈中有一个我可以操作的堆栈指针。

编辑:好的,关于添加800的部分是有道理的。我想我无法理解的是在为temp->堆栈分配1024个字节之后,我该如何向该堆栈的底部插入一些内容?我是否需要拥有stack_ptr或者有办法来偏移堆栈变量。

2 个答案:

答案 0 :(得分:1)

您的问题很可能是您认为的

temp->stack_ptr += 800;  //move stack_ptr down towards bottom of stack

会将堆栈指针前进到第800个堆栈条目。它没有,它将堆栈指针移动到800 * sizeof(int)字节(可能是3200),而你只分配了1024个字节。 如果您需要动态分配某些内容的n项,那么惯用的C代码就是

sometype *foo;
/* ... */
foo = malloc (n * sizeof (*foo));

对于指向char的指针,sizeof乘法通常被省略,因为根据C语言标准的定义,sizeof(char)为1。

答案 1 :(得分:-1)

temp->stack = malloc(1024) //allocate 1024 bytes

应该是:

temp->stack = malloc(1024 * sizeof(int)); //allocate 1024 bytes

你的问题究竟是什么?

修改

让我解释一下我的意思:

您正在尝试移动800块的指针(800 * sizeof(int)),但您只分配1024 = 1024 / sizeof(int)块