兩棧共用乙個緩衝區

2021-06-21 17:10:14 字數 1641 閱讀 1793

/**< 2014年04月26日 */

/**< 兩個棧共用乙個緩衝區 */

// 儲存格式

// <- base2

// top2 ->

//

//

//

// top1 ->

// <- base1

#include #include #include #include typedef int element_t;

/**< 兩個棧的資料結構 */

typedef struct tag_stack_t

*stack_t;

/**< 初始化,分配記憶體,賦初值 */

void stack_init(stack_t& stack, int size)

/**< 清空指定的棧,讓棧頂等於棧底即可 */

void stack_clear(stack_t& stack, int n)

else if (2 == n)

}/**< 銷毀棧,釋放記憶體 */

void stack_destroy(stack_t& stack)

/**< 判斷是否為空,判斷棧頂和棧底是否相等 */

bool stack_is_empty(stack_t& stack, int n)

return stack->top2 == stack->base2;

}/**< 判斷是否已滿,棧1的位址是向上增加的,棧2的位址是向下減的 */

/**< 若棧1的裡面再放進去乙個後,和棧2的棧頂相等,則已滿 */

bool stack_is_full(stack_t& stack)

/**< 獲取大小,用位址偏移量除以元素的大小即可 */

int stack_size(stack_t& stack, int n)

/**< 棧2的棧頂是遞減的 */

return (stack->base2 - stack->top2) / sizeof(element_t);

}/**< 向指定的棧放入乙個元素 */

bool stack_push(stack_t& stack, element_t e, int n)

if (1 == n)

else

return true;

}/**< 從指定的棧中取出乙個元素 */

bool stack_pop(stack_t& stack, element_t& e, int n)

if (1 == n)

else

return true;

}/**< 遍歷輸出 */

void print(stack_t& stack)

printf("%40s|", buffer);

/**< 輸出棧2 */

n = 0;

buffer[0] = '\0';

for (p = stack->top2+1; p <= stack->base2; ++p)

printf("%-40s\n", buffer);

}/**< 測試程式 */

void stack_test()

int main()

緩衝區溢位 棧

正義與 共存,推動正義的進步,正義迫使 的昇華,兩者誰是誰非。是非只是它人的定義,兩者都是正確的 在我們除錯程式的時候,我們如何去掉除錯視窗中的cccc 的內容。第一步 開啟專案屬性 c c 生成 基本執行時檢查設定為 未初始化的變數 安全檢查 否 第二步 開啟專案屬性 聯結器 高階 隨機基址為 否...

緩衝區溢位 棧溢位

1 緩衝區概念 緩衝區 buffer 又稱為快取,它是記憶體空間的一部分。也就是說,在記憶體空間中預留了一定的儲存空間,這些儲存空間用來緩衝輸入或輸出的資料,這部分預留的空間就叫做緩衝區。使用緩衝區有兩個好處 1 減少實際物理讀寫次數 2 緩衝區在建立時就被分配記憶體,這塊記憶體區域一直被重用,可以...

Kali 棧緩衝區溢位

堆疊記憶體是執行時實時分配的 與棧溢位有關的暫存器主要是esp,ebp,eip。esp和ebp都是用於控制當前執行函式棧幀的暫存器。ebp指向棧幀最高記憶體位址,esp指向棧幀最低記憶體位址。棧幀 棧幀中存放著函式的引數,區域性變數,及恢復前乙個棧幀所需要的資料。一旦函式執行完畢,整個棧幀就會被復原...