我目前有一個問題,關於我的C代碼有關RAM寫入似乎發生(我通過觀察通過gdb的結構成員檢查),即使我沒有主動打算寫該地區。作爲跟隨寫入RAM區域我沒有解決
我的結構聲明:提供
typedef struct tcb {
unsigned int tid;
thread_state_t state;
pthread_t thread;
sem_t sema;
unsigned long interval;
unsigned long rtime;
} tcb_t ;
typedef struct node {
tcb_t *tcb;
} node;
typedef struct entry entry;
typedef struct entry {
entry *next;
entry *prev;
node node;
} entry;
這些定義,我不能改變它們。 我現在初始化的entry
陣列與此代碼:
entry = malloc((num_threads) * sizeof(entry));
for (i = 0; i < num_threads; i++)
{
entry[i].next = NULL;
entry[i].prev = NULL;
entry[i].node.tcb = malloc(sizeof(tcb_t));
entry[i].node.tcb->tid = i;
entry[i].node.tcb->state = THREAD_RUNNABLE; //initialize value to show the scheduler this thread works for the first time
entry[i].node.tcb->interval = interval;
}
其它字段不意味着在這一點上初始化。然而,一旦我運行我的代碼,讓我們說num_threads = 6
,entry[0].node.tcb->tid
的值失去了它的值0,但持有一些奇怪的東西(看起來像一個指向我)。
當在gdb中爲該字段設置監視點時,它在線entry[i].node.tcb = malloc(sizeof(tcb_t));
處通知我,我的值被覆蓋(此時i
保持值2)。爲什麼是這樣?
gdb觀察點在行'entry [i] .node.tcb = malloc(sizeof(tcb_t));'__with_what_of_' i'通知你? – CiaPan
'valgrind'可以幫助你 –
I1的價值得到通知,在爲I = 2,我後下gdb的輸出(可能會顯得凌亂,對不起那個) 255項[I] .node.tcb =的malloc(的sizeof(tcb_t)); (GDB)N 硬件監視點2:項[0] .node.tcb-> TID 舊值= 0 新值= 6299888 在aufgabe_5.c主(的argc = 3,argv的= 0x7fffffffe688):256 256條目[i] .node.tcb-> tid = i; (gdb)print i $ 1 = 2 – PfannkuchenXD