2017-10-20 81 views
-1

我在C中創建自定義內存分配器,但使用先前在其中分配的指針移動到我的「mem」數組中時遇到問題。我需要將一個索引移動到左邊,這樣我可以看到在我嘗試釋放的那個塊之前的塊是否爲空。但移動指針不能按我的意願工作。 那麼如何在指針之前移動一個索引?使用指針瀏覽數組使用指針

int main() 
{ 
    char mem[50]; 
    char *pointer; 
    char *ptr_toFree; 

    pointer=(char *) &(mem[10]); 
    pointer = "hello"; 
    int num = 10; 
    mem[9] = num; 

    ptr_toFree=(char*)(pointer-1); 
    printf("Value of mem[9] = %d\n", *ptr_toFree); 

    return 0; 
} 
+0

'pointer'指向靜態數組''hello''的第一個元素。 'pointer-1'具有未定義的行爲。 – melpomene

+0

FWIW,'pointer =(char *)&(mem [10]);'只是一種複雜的寫入方式'pointer = mem + 10;' –

+0

您的程序可以縮減爲'printf(「%d \ n」 ,「你好」[ - 1])',這顯然是無效的。 – melpomene

回答

0

如果要創建一個自定義的內存分配器,你將需要實現的malloc,realloc的/自由等,你如何保持內存分配的軌道是由你(一般是某種固定的頭文件之前剛剛指針返回給調用者),沒有「標準」,所以你不能只從指針中減去n個字節並開始挖掘。