2017-08-27 59 views
1

現在正在處理一個相當基本的問題,似乎無法讓我理解爲什麼我是seg錯誤!如果這看起來非常簡單,那麼對於C編程/分配內存來說還是相當新的。將內存分配給結構中的字符串

我相信我分配內存錯了,我只是不知道如何。任何幫助都很棒!

功能emalloc正好與空校驗不同文件中的malloc函數:

void *emalloc(size_t s) { 
void *result = malloc(s); 
if(NULL == result) { 
fprintf(stderr, "Memory Allocation Failure!"); 
exit(EXIT_FAILURE); 
} 
return result; 
} 


struct htablerec { 
int capacity; 
int num_keys; 
char **keys; 
int *frequency; 

}; 

htable htable_new(int capacity){ 
int i; 

htable htab = emalloc(sizeof *htab); 
htab->capacity = capacity; 
htab->num_keys = 0; 
htab->frequency = emalloc(capacity * sizeof htab->frequency[0]); 

for(i=0; i<capacity; i++){ 
    htab->keys[i] = emalloc((WORD_LEN + 1) * sizeof (char)); 
} 

for(i=0;i< capacity;i++){ 
    htab->frequency[i]= 0; 
    htab->keys[i] = NULL; 

} 
return htab; 
} 
+1

從不完整的片段看起來好像您在迭代'htab->鍵之前沒有爲'htab-> keys'分配任何內存' –

+0

這是PHP的任何機會 - emalloc? – akshayk07

+0

什麼是'emalloc'? –

回答

1

在結構上,您聲明指針字符數組。

char **keys; 

首先,你必須對這些指針分配內存以他們每個一前分配足夠的空間。

htab->keys = malloc(sizeof(char*) * capacity); 

您正在訪問未初始化的指針並導致未定義的行爲。

+0

emalloc只是一個malloc函數,在一個空檢查的不同文件:)抱歉混淆! – Harry

+1

@哈利請你的問題,並明確__there__。 –