我在採訪中被問及如何在不使用堆棧指針的情況下找到堆棧位置,並給出堆棧的上限和堆棧深度。我無法給出答案。後來我搜索了同樣的內容,但沒能找到一個。任何人都可以幫我找到答案。如何在沒有堆棧指針的情況下找到堆棧的當前位置?
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