下午好!這是我第一次發帖!使用valgrind和gdb進行調試
當我使用valgrind時,我有一個無效的寫入錯誤,但是當我使用gdb時我可以計算出它!
#include <stdio.h>
#include <stdlib.h>
#define MAX_INDEX 2
void *z_m = 0;
struct block {
struct block * suiv;
};
//Declaration of a global array
struct block * tzl[MAX_INDEX+1];
//Function used to dislay tzl in the main.
void display() {
for(int i=0; i<=MAX_INDEX; i++) {
struct bloc * tmp = tzl[i];
printf("%d => ",i);
while (tmp!=NULL) {
printf(" %li ->",(unsigned long)tmp);
tmp = tmp -> suiv;
}
printf("\n");
}
}
int main() {
z_m = (void *) malloc(1<<MAX_INDEX);
for (int i=0; i<MAX_INDEX; i++)
{
tzl[i] = NULL;
}
tzl[MAX_INDEX] = z_m;
//Here is the problem with valgrind
tzl[MAX_INDEX] -> suiv = NULL;
display();
free(z_m);
return 0;
}
可能是什麼問題?謝謝你的回答。
能否請你解釋一下(或者換一種說法)「但是當我使用gdb的時候我能想到它」? –
順便說一句,你的符號(函數和變量)的名字實際上是不可讀的(至少對於普通的英語讀者來說,這是問題的預期發佈方式)。 –
對不起!我試着添加一些評論。當我使用gdb時,進程正常終止,這對於我考慮valgrind中的錯誤是很奇怪的! –