分割错误时释放大数组的指针



我的代码在小文件上运行没有错误。但是我在大输入(百万行)上得到分段故障。请看下面的代码:

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;

* count输入

的行数
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,然后你试图保存结构元素在NULL地址在顶部函数findUnion

相关内容

  • 没有找到相关文章

最新更新