gpt4 book ai didi

c - 释放无关数据时出现段错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:14:56 25 4
gpt4 key购买 nike

我正在创建一个带有链表的表,其中的数据在传递给插入方法时会重复。为了对此进行测试,我创建了一个包含要插入的值的数组,然后将它们插入表中。当我释放数组然后释放表时,我收到 SEG FAULT 错误。因此,我得出结论,两个结构中的指针必须指向相同的内存区域。但是,当我复制数据时,我看不出问题出在哪里......

测试代码如下:

for(i=0; i<1024; i++) {
key[i] = (char*)malloc(16*sizeof(char));
sprintf(key[i],"a/key/b-%d",i);
data[i] = data_create2(strlen(key[i])+1,strdup(key[i]));

table_put(table,key[i],data[i]);
}

assert(table_size(table) == 1024);
result = (table_size(table) == 1024);

for(i=0; i<1024; i++) {
d = table_get(table,key[i]);

assert(d->datasize == data[i]->datasize);
assert(memcmp(d->data,data[i]->data,d->datasize) == 0);
assert(d->data != data[i]->data);

result = result && (d->datasize == data[i]->datasize &&
memcmp(d->data,data[i]->data,d->datasize) == 0 &&
d->data != data[i]->data);
data_destroy(d);
}

for(i=0; i<1024; i++) {
free(key[i]);
//data_destroy(data[i]);
}

table_destroy(table);

当我取消注释 data_destroy(data[i]) 行时,程序给出了 Seg Fault。

table_put 的代码:

int table_put(struct table_t *table, char * key, struct data_t *value) {


if(table == NULL || key == NULL || value == NULL) return -1;



struct entry_t *new_pair = entry_create(key, value);



int i = key_hash(key, table->size);

int l = 0;
if (list_get(table->list[i], new_pair->key) == NULL) {
l = 1;
}

if(list_add(table->list[i], new_pair)==-1){

entry_destroy(new_pair);
return -1;
}
table -> length = table -> length + l;

return 0;

}

代码:entry_create,我在其中复制数据:

struct entry_t *entry_create(char *key, struct data_t *data){
if(data == NULL || key == NULL){
return NULL;
}
struct entry_t *entry = (struct entry_t *) malloc(sizeof(struct entry_t));
if(entry == NULL){
return NULL;
}
entry->key = (char*) malloc(sizeof(strlen(key))+1);

memcpy(entry->key,key,strlen(key)+1);


entry->value = data_dup(data);


//free(key);
data_destroy(data);
return entry;
}

最佳答案

free 上的段错误通常是双重 free,这意味着您试图释放已经被 free 的东西。或者当您尝试在没有任何 malloc 的情况下释放指针时。data_create2 函数上有 malloc 吗?

如果不存在,那么您正在尝试释放从未进行 malloc 的数据数组成员

关于c - 释放无关数据时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53128107/

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