我有:
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或者有办法来偏移堆栈变量。
答案 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)块