gpt4 book ai didi

c - 返回指向函数中 malloc 的结构的指针

转载 作者:行者123 更新时间:2023-11-30 15:26:27 24 4
gpt4 key购买 nike

我正在使用一个函数来为哈希函数分配和初始化一些内存,如下所示:

int main (int argc, char * argv [])
{
Bucket * hashTable;
hashTable = createHashTable();
...

在“main.c”中

在另一个文件中调用的函数是这样的:

Bucket * createHashTable()
{
Bucket * hashTable = malloc ( sizeof(Bucket) * HASHSIZE);
int c=0;
for (c=0;c<HASHSIZE;c++)
{
hashTable[c].key=NULL;
hashTable[c].text=NULL;
hashTable[c].next=NULL;
}
return hashTable;
}

我的程序使用“-pedantic -Wall”编译干净,但存在段错误。使用 gdb,我得到这个:

Reading symbols from hash...done.
(gdb) break 11
Breakpoint 1 at 0x400990: file main.c, line 11.
(gdb) run
Starting program: /home/user/Projects/random/hash

Breakpoint 1, main (argc=1, argv=0x7fffffffdf78) at main.c:11
11 hashTable = createHashTable();
(gdb) print hashTable
$1 = (Bucket *) 0x400520 <_start>
(gdb) print * hashTable
$2 = {
key = 0x89485ed18949ed31 <error: Cannot access memory at address 0x89485ed18949ed31>,
text = 0x495450f0e48348e2 <error: Cannot access memory at address
0x495450f0e48348e2>, next = 0xc74800400a90c0c7}
(gdb)

header 中具有结构“Bucket”定义的部分:

typedef struct bucket{
char * key;
char * text;
struct bucket * next;
} Bucket;

这是范围问题吗?当函数完成时,它会杀死我的 malloc 内存还是什么?

平台是64位Linux,这次从malloc()返回的地址是0x1665010 - 我想如果失败的话它将是NULL。

编辑:main.c 中的下一个函数尝试向表中添加一个条目:

printf("Adding banana...\n");
addItem("Banana", "Bananas are yellow", &hashTable);

(是的,是的 - 香蕉,我知道)功能是:

void addItem(char * key, char * data, Bucket ** table)
{
unsigned int hashkey;
hashkey=hash(key);
printf("%lu\n",strlen(key));
if (!table[hashkey]->text) /* SEGFAULTS HERE */
{
table[hashkey]->key=key;
table[hashkey]->text=data;
}
else
{
Bucket * newListElement = malloc(sizeof(Bucket));
newListElement->key=key;
newListElement->text=data;
newListElement->next = NULL;
table[hashkey]->next = newListElement;
}

}

最佳答案

这一行:

if (!table[hashkey]->text)

应该是:

if ( !(*table)[hashkey]->text )

以及以下几行类似的内容。在这个函数中,table实际上是一个指向main中名为hashTable的变量的指针。

修复此错误的另一种方法是使函数采用 Bucket *,而不传递 hashTable 的地址。该函数似乎不需要知道 hashTable 的地址,因为它只是将内容放入表中。

关于c - 返回指向函数中 malloc 的结构的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27347761/

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