我在采访中被问及如何在不使用堆栈指针的情况下找到堆栈位置,并给出堆栈的上限和堆栈深度。我无法给出答案。后来我搜索了同样的内容,但没能找到一个。任何人都可以帮我找到答案。如何在没有堆栈指针的情况下找到堆栈的当前位置?
0
A
回答
2
只需在堆栈上创建一个变量(即使用“自动存储”)并获取其地址。
void f() {
int x;
printf("Current stack position: %p\n", &x);
}
+1
这是一个答案,但我觉得这不是他们指导他的东西你没有使用给出的数据:stack upperbound,它是深度(必须定义井深) – LiorA
0
我认为这是一种聆听您要提供的几种解决方案的方法。 因此,让我们开始为int的完全指针堆栈:
struct stack{
int *pos;
int *start;
int *end;
}
struct stack new_stack(size_t size)
{
struct stack * res=malloc(sizeof(struct stack));
res->start=malloc(sizeof(int)*size);
res->pos=res->start;
res->end=res->start+size-1;
}
比位置由给:
return res->pos-res->start;
但我认为这是vorbidden; 因此,让我们定义一个指数(这不是指针):
struct stack{
int ix;
int *array;
int n;
}
struct stack *new_stack(size_t size)
{
struct stack * res=malloc(sizeof(struct stack));
res->array=malloc(sizeof(int)*size);
res->ix=0;
res->n=size;
return res;
}
//you return
return res->ix;
其他的解决方案是一个无效值的占位符。但是每次你都应该得到整个阵列的时候都是哑巴。 (它就像空终止字符串) 否则,如果这两个答案不满足正确答案的地方是“这是不可能的” 只有在数组声明为静态数组[100]时,堆栈upperbound才有可能。 比sizeof(array)/ sizeof(* array)大。但是如果你打算编写一个堆栈的代码,你可以将它写成动态的
相关问题
- 1. 中断堆栈的堆栈指针
- 2. 如何找到当前的堆栈?
- 3. 堆栈帧和堆栈指针
- 4. 堆栈由指针在C工作,除了在堆栈下溢
- 5. 使用dwarf2获取堆栈指针的堆栈指针值
- 6. ANDing堆栈指针
- 7. 在没有堆栈的情况下创建NPE
- 8. 在没有System.Collections的情况下创建堆栈类
- 9. Linux下的伪随机堆栈指针?
- 10. 3活动堆栈情况
- 11. C中有堆栈指针快吗? (没有间接但仍堆)
- 12. 如何在堆栈溢出发生之前看到堆栈?
- 13. 8086中的堆栈段和堆栈指针
- 14. 堆栈指针和分割
- 15. 线程堆栈指针
- 16. 堆栈指针VS应用
- 17. 汇编堆栈指针AVR
- 18. 初始化堆栈指针
- 19. 堆栈没有在非标准位置找到C库
- 20. 如何判断指针是指向堆栈还是指向堆?
- 21. 如何在没有获得NPE的情况下在堆栈上弹出节点
- 22. 基指针和堆栈指针
- 23. 找出指针是指向堆栈,堆或程序文本吗?
- 24. 将堆栈复制到没有分割的堆栈错误
- 25. 如何在只有损坏的堆栈文件时找到调用堆栈?
- 26. 添加指向堆栈的指针C
- 27. 返回指令堆栈中的指针
- 28. 以下情况下的数据结构如何? (最大堆栈)
- 29. 如何在没有pstack和gdb的情况下获得线程堆栈信息
- 30. 如何在没有%rbp寄存器的情况下重新分配堆栈帧?
它们与“上限”是什么意思?难道他们希望你追踪回报地址,并且真的对堆栈的底部有兴趣吗? – 5gon12eder
@ 5gon12eder upperbound意味着堆栈可以容纳的最大元素 – LiorA
@LiorA我也这么认为,但是为了解决这个问题,这个信息似乎并不是很有帮助。 – 5gon12eder