後NULL我使用vmalloc的分配一個連續的虛擬存儲器塊。然後,我使用memset將該塊的所有字節設置爲0。然後,我用我創建的大小爲16字節的數據結構填充此內存區域。指針變爲遞增
然後,我的功能之一時,我把一個指向這些結構中的一個,並開始走在存儲區域找到的第0字節,這樣我可以在這裏放置另一個數據結構。我的第一個指針正確地獲取了以前放置的結構,並且我可以看到地址。這是打印輸出:
點的文件名/ //文件名 ffffc9001095b500 //地址
這是對這種結構的正確的存儲區(因爲我把它放在這裏)。
然後,我增加我的指針,這應該帶我到內存區域ffffc9001095b510, ,但相反,我的指針返回的地址爲NULL。爲什麼是這樣?
下面的代碼:
void * check_aux(char * upPath, int index, int location){
struct directory * point;
int i = 0;
int dirnum = 0;
//int lastaddr;
printk("Inside check_aux\n");
if(location > 117){
return NULL;
}
else if(upPath == NULL){
return NULL;
}
else{
point = getLocation(index, location);
printk("This is point's filename %s\n%p\n", point->filename, point);
while(point != NULL && dirnum < 16){
while(point->filename[i] == upPath[i] || (point->filename[i] == 0 && (upPath[i] =='/' || upPath[i] == 0))){
printk("%c == %c\n", point->filename[i], upPath[i]);
if(point->filename[i] == 0 && upPath[i] == 0){
return NULL;
}
else if(point->filename[i] == 0 && upPath[i] == '/'){
if(nodes[point->index].type[0] == 'd'){
return check_aux(&upPath[i+1], point->index, 0);
}
else{
return NULL;
}
}
else{
i++;
}
}
dirnum++;
(point++);
}
if(dirnum == 16){
return check_aux(upPath, index, location+1);
}
printk("Returning point %p\n", point);
return point;
}
}
的數據結構定義爲
struct directory{
char filename[14];
short index;
};
和文件名不能以0
啊,這麼一個簡單的錯誤。 TY。 – Magn3s1um