gpt4 book ai didi

c - 为结构中的字符串分配内存

转载 作者:太空宇宙 更新时间:2023-11-04 03:21:20 24 4
gpt4 key购买 nike

现在正在处理一个相当基本的问题,我似乎无法理解为什么我会出现段错误!对于 C 编程/分配内存还是相当陌生,如果这看起来 super 简单,我们深表歉意。

我相信我分配的内存是错误的,我只是不确定如何分配。任何帮助都很棒!

函数 emalloc 只是一个不同文件中的 malloc 函数,带有 null 检查:

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;
}

最佳答案

在该结构中,您声明了一个指向 char 的指针数组。

char **keys;

首先,在为每个指针分配内存之前,您必须为这些指针分配足够的空间。

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

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

关于c - 为结构中的字符串分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45904804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com