C 将内存分配给结构中的字符串

C 将内存分配给结构中的字符串,c,object,memory,C,Object,Memory,现在正在研究一个相当基本的问题,我似乎不太明白为什么我会犯seg错误!对于C编程/分配内存来说还是相当新的,如果这看起来非常简单,那么很抱歉 我相信我把记忆分配错了,只是不知道怎么分配。任何帮助都很棒 函数emalloc只是另一个文件中带有空检查的malloc函数: void *emalloc(size_t s) { void *result = malloc(s); if(NULL == result) { fprintf(stderr, "Memory Allocation Failure!

现在正在研究一个相当基本的问题,我似乎不太明白为什么我会犯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;
}
void*emalloc(尺寸){
无效*结果=malloc(s);
if(NULL==结果){
fprintf(stderr,“内存分配失败!”);
退出(退出失败);
}   
返回结果;
}
结构htablerec{
国际能力;
int num_键;
字符**键;
int*频率;
};
htable htable_新(内部容量){
int i;
htable htab=emalloc(sizeof*htab);
htab->容量=容量;
htab->num_keys=0;
htab->frequency=emalloc(容量*htab的大小->频率[0]);
对于(i=0;ikeys[i]=emalloc((WORD_LEN+1)*sizeof(char));
}
对于(i=0;i频率[i]=0;
htab->keys[i]=NULL;
}
返回htab;
}

在结构中,您正在声明指向char的指针数组

char **keys;
首先,必须为这些指针分配足够的空间,然后才能将内存分配给每个指针

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

您正在访问未初始化的指针,它导致了未定义的行为。

从不完整的片段来看,在迭代
htab->keys[i]之前,您似乎没有为
htab->keys分配任何内存
这是PHP吗-emalloc?什么是
emalloc
?@MichaelWalz-emalloc是malloc,它从不返回NULL,因为它给出了一个致命的错误。请注意,在
htab->frequency[0]中使用
sizeof-htab->frequency=emalloc(capacity*sizeof-htab->frequency[0])
:使用取消引用类型的大小。继续使用
htab->keys[i]=emalloc((WORD\u LEN+1)*sizeof htab->keys[i][0]);
以及缺少的
htab->keys=malloc(sizeof htab->keys[0]*容量);
emalloc只是另一个文件中的malloc函数,带有空检查:)抱歉搞混了@哈里,请你把问题说清楚。