#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct NBIG{
    int number;
    struct NBIG *nseg;
    struct NBIG *nant;
}Nbig;
int main(int argc,char *argv[])
{
    char *namefile,ch;
    Nbig *new_node=NULL,*resmulti=NULL,*ofsum=NULL;
    Nbig *list=NULL;
    int cont,x,y;
    FILE *arq;

    if (argc>3) {
        for(cont=3; cont < argc; cont++){

            namefile =strcat(argv[cont], ".txt");
            printf("%s", namefile);
            arq = fopen(namefile, "r");
            if(arq == NULL)
                printf("Fail\n");
            else{
                fseek(arq, -1, SEEK_END);
                long position = ftell(arq);
                while(position >= 0){
                    fseek(arq, position, SEEK_SET);
                    fread(&ch, sizeof(char), 1, arq);
                    if (ch == ' ') {
                        ofsum=soma(ofsum, list);
                        list = delete_list(list);
                        new_node = delete_list(new_node);
                        position = position-1;
                    }
                    else{
                       new_node =makenode();
                       new_node->number= atoi(&ch);
                       list =insertfirst(list, new_node);
                       position--;
                       show(list);
                       printf("\n");
                    }
                }
                show(ofsum);
                printf("\n");
                fclose(arq);
            }

        }
    }
    else{
    ...
    }
return 0;
}


在文件中:
(数字之间用1个空格隔开)
例:
123 123

我尝试执行该程序并返回:

1个

21

321

agrv(28381,0x7fff8f271380)malloc:*对象错误
 0x7f814bc026c0:未分配正在释放的指针*设置a
 malloc_error_break中的断点进行调试

我该如何解决这个问题?
我在执行中介绍3个参数

Nbig *makenode(){
    Nbig *R = (Nbig*)malloc(sizeof(Nbig));
    R->number=0;
    R->nant=NULL;
    R->nseg=NULL;
    return(R);
}
Nbig *delete_list(Nbig *L) {
    if(L==NULL){
       return L;
    }
    Nbig *next;
    while (L) {
        next = L->nseg;
        free(L);
        L = next;
    }
    return NULL;
}




Nbig *insertfirst(Nbig *A,Nbig *nv){
    if(A==NULL){
        nv->nseg=NULL;
        nv->nant=NULL;
        return nv;
    }
    nv->nseg=A;
    A->nant=nv;
    return nv;
}


功能辅助

最佳答案

您释放列表的循环是错误的。您要释放当前元素L,然后在下一次迭代中使用L->nseg。释放指针后延迟指针是未定义的行为。

在释放当前元素之前,需要保存nseg指针。

它应该是:

Nbig *apaga(Nbig *L) {
    Nbig *next;
    while (L) {
        next = L->nseg;
        free(L);
        L = next;
    }
    return NULL;
}

09-11 19:24