2011-08-24 117 views
-1

關於該代碼:C語言:爲什麼我得到NULL?

tp是指向包含表的某個結構的指針。

該表是一個指向不同結構的指針,用作數組。

大小隻是表的大小。

即時通訊以初始化所有單元

陣列爲NULL發送這些veriables到一個函數。

這一行:使用Eclipse調試器我可以看到,該數組中的對象是INFACT

被初始化爲NULL

void initArr(ObjectP* array,int size) 
{ 
    int i; 
    for (i = 0; i < size; ++i) 
    { 
     array[i]=NULL; 
    } 
} 

initArr(tp->table,tp->size); 

它們發送到該功能,但是當方法結束時,

tp-> table爲NULL。

指針狂野?

請幫忙。

的結構:

表:

typedef struct Table 
    { 
     size_t size; 
     hashFcn hash; 
     printFcn print; 
     comparisonFcn comp; 
     ObjectP* table; 
     int duplicated; 
    }Table; 

對象:

typedef struct Object 
    { 
     void *key; 
     ObjectP pointsTo; 
    }Object; 
+2

這是哪一個? C還是C++?我給你的建議將會*非常*不同,取決於它是哪一個。 – Flexo

+1

請發佈'struct'。 – 2011-08-24 15:34:26

+0

爲什麼你在返回'void'的函數中返回一些東西? – Constantinius

回答

0

數組和指針是相似但不同。

指針數組可以表示爲內存中的一些連續指針(具有數組中第一個指針所在的地址)。

在這種情況下,tp-> table與tp-> table [0]完全相同,但假設[0](因爲它具有相同的地址)。在以這種方式實現的系統中,tp->表指定一個地址,並且從該地址的偏移量(到達數組元素)被表示爲一個值乘以數據類型大小(或者指針的大小案件)。

tp->table (the base address 0x00000100) 
tp->table[0] (the address 0x00000100 + 0 * sizeof(... pointer ...) = 0x00000100) 
tp->table[1] (the address 0x00000100 + 1 * sizeof(... pointer ...) = 0x00000104 (some systems only)) 
tp->table[2] (the address 0x00000100 + 2 * sizeof(... pointer ...) = 0x00000108 (some systems only)) 

所以你的調試器實際上可能會打印出巾>表是完全等同於巾 - >表將取決於你的編譯器的實現[0]。

0

的代碼提交似乎是錯誤的(你是返回從void函數的東西!),但我m會冒昧地猜測,並假設在你的實際代碼中,你試圖在initArr中設置「array」爲某些東西(可能是通過malloc),在這種情況下,我們有一個經典的問題:你正在傳遞tp-> table現在你 -

衛生署:按值,所以它不會被initArr改變:initArr上巾>表的本地副本,當initArr結束:)

編輯並拋棄工作發佈了更新,看起來我的猜測是錯誤的。 :/如果我說得對,想象一下榮譽! :)

+0

我編輯了我的代碼,這是一個錯誤。 – Itzik984

相關問題