gpt4 book ai didi

c - 释放大数组指针时出现段错误

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

我的代码在小文件上运行没有错误。但我在大输入(数百万行)上遇到段错误。请参阅下面的一些代码:

element* unionFind(void *data)
{
element *retVal = NULL;
retVal = (element *)malloc(sizeof(element));
retVal->data = data;
retVal->rank = 0;
retVal->leader = retVal;
return retVal;
}

主要:
...

int main (int argc, char* argv[])
{
char str[2048];
char* v_S = NULL;
struct set *s_v = NULL;

* 计算输入的行数

long *v_L = (long *)malloc(sizeof(long)*ct_lines);
element **v = malloc(sizeof(element)*ct_lines) ;

while(fgets(str,sizeof(str),fp) != NULL)
{
v_S = strtok(str,":");

v_L[i] = atol(v_S);
v[i] = unionFind(&v_L[i]);
s_v = add_vertex(v_L[i], v[i]);

i++;
}

fclose(fp);

for (i = 0; i < ct_lines; i++) //Here segfault
{
free(v[i]); v[i] = NULL;
}

free(v); v = NULL;
free(v_L); v_L = NULL;

}

最佳答案

每次 malloc 之后,您应该检查 malloc 是否返回 NULL(这意味着由于堆已满而无法分配内存)。如果返回NULL,一般会打印错误信息。如果您仍然想分配内存,则必须在释放一些已分配的内存后重试。

由于您的程序在处理大文件时失败,因此不需要详细阅读代码,它一定会失败,因为它耗尽了可用内存并且 malloc 返回 NULL,然后您尝试将结构元素保存在 top 函数的 NULL 地址处查找联盟。

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

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