C 在结构中创建数组?分段故障
我编译了少量的C 在结构中创建数组?分段故障,c,segmentation-fault,dynamic-memory-allocation,C,Segmentation Fault,Dynamic Memory Allocation,我编译了少量的C代码,当我运行它时,我得到了一个分段错误 它在create_index()函数的第一行停止,即使我有权访问指针的地址。我不知道发生了什么事 main.c 第一件事,当您遇到分段错误时,尝试使用内存调试器调试代码,如。大多数情况下,它将指出错误的代码块 从您发布的代码中可以看出,您没有为HTinfo*head分配任何内存,并试图将地址(无效)传递到create_index(),然后,在不进行任何检查的情况下,将其取消引用。由于内存位置无效,这是一种未定义的行为情况,很可能导致分段错
C
代码,当我运行它时,我得到了一个分段错误
它在create_index()
函数的第一行停止,即使我有权访问指针的地址。我不知道发生了什么事
main.c
第一件事,当您遇到
分段错误时
,尝试使用内存调试器调试代码,如。大多数情况下,它将指出错误的代码块
从您发布的代码中可以看出,您没有为HTinfo*head
分配任何内存,并试图将地址(无效)传递到create_index()
,然后,在不进行任何检查的情况下,将其取消引用。由于内存位置无效,这是一种未定义的行为情况,很可能导致分段错误,就像您的情况一样
此外,最好的做法是在声明指针时始终初始化指针,并检查函数的传入指针变量的有效性。您应该使用HTinfo*head=NULL
在main()
中初始化head
,并且可能需要在create_index()
函数本身中添加NULL
检查,这将帮助您检测向函数传递无效(NULL)地址的情况(以防忘记分配内存)并且还可以防止代码崩溃。你可以用像
if (*head != NULL)
{
//your code
}
else
{
//print appropriate error message, return/exit
}
您没有为
头分配内存。main
中的malloc
:
HTinfo * head = malloc(sizeof *head);
if(NULL == head) // handle out-of-memory
或在创建索引中:
*head = malloc(sizeof **head);
if(NULL == *head) // handle out-of-memory
在main()
中,您正在分配指向HTInfo
结构的指针。您可以静态地分配整个结构,并将指针传递到create\u index()
并处理create_index()中的指针
您没有为头(在主)或*头(在创建索引)分配以下内容:(*头)->空=1;'*head`或head
中没有有效的内存指针。错误如其他人所说。如果您在主调用中初始化了值:HTinfo*head=NULL,可能会更加明显。如果没有初始值,在“c”中,它可能是任何东西……您可以使用一些关于c的读数。这里有一些很好的参考:注意,*head
签入create_index()
不保证工作,因为main()中的指针
未初始化,因此它可能不是空指针。@JonathanLeffler感谢您提到这一点。我更新我的答案。
if (*head != NULL)
{
//your code
}
else
{
//print appropriate error message, return/exit
}
HTinfo * head = malloc(sizeof *head);
if(NULL == head) // handle out-of-memory
*head = malloc(sizeof **head);
if(NULL == *head) // handle out-of-memory
HTinfo *head;
int main(void)
{
HTinfo head;
create_index(&head);
// continue ...
// you should be testing for the return value of create_index()
int create_index(HTinfo *phead)
{
int i;
phead->empty = 1;
phead->index = calloc(101, sizeof(nodeptr));
if (phead->index == NULL)
return -1;
// continue ...