[英]Why am I getting a memory access violation here?
該文件是GoAhead WebServer的一部分,該服務器實現了非常快速的塊分配方案。
在第284行,Web服務器進程在隨機時間崩潰。
} else if ((bp = bQhead[q]) != NULL) {
/*
* Take first block off the relevant q if non-empty
*/
bQhead[q] = bp->u.next; //MEMORY ACCESS VIOLATION HERE
可能的原因是什么?
編輯
bp是指向此結構的指針,並在此頭文件中進行並集
typedef struct {
union {
void *next; /* Pointer to next in q */
int size; /* Actual requested size */
} u;
int flags; /* Per block allocation flags */
} bType;
謝謝。
這是可能的原因。
您已經搞砸了,破壞了某些數據結構或堆棧。
bQhead
是NULL或無效的指針
q
超出bQhead
的范圍
bp
是NULL或無效的指針
使用調試器單步執行代碼,或使用printf調試,然后查看bQhead,q,bp的值是否應為應有的值。
給我們更多提示...
如果是隨機的,則可能是另一個線程破壞了內存...
my2c
如果不在調試器下運行,我可能會認為q超出了0到B_MAXCLASS-1的范圍。 設置q的函數ballocGetSize()
不會進行任何邊界檢查以確保塊類保持在邊界內。
一個簡單的斷言可以在延遲之前檢查q是否在范圍之內,從而排除了可能性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.