C BeagleBone上的分段错误SIGSEGV错误

C BeagleBone上的分段错误SIGSEGV错误,c,embedded,beagleboneblack,C,Embedded,Beagleboneblack,我仍然对C代码中的分段错误有问题。当我调用函数current\u live\u read(ainpath)时第八次出现错误:没有可用的“\u int\u malloc()at 0x25be2”的源代码 主要功能如下所示: void current_read(void) { system(AINinit); char *ainpath; ainpath=init_current(); int *current; float avgcurr=0;

我仍然对C代码中的分段错误有问题。当我调用函数
current\u live\u read(ainpath)时第八次出现错误:
没有可用的“\u int\u malloc()at 0x25be2”的源代码
主要功能如下所示:

void current_read(void)
{

    system(AINinit);

    char *ainpath;
    ainpath=init_current();

    int *current;
    float avgcurr=0;
    float allcurr=0;
    int i=0;

    while(1)
    {
    //sleep(1);
    i++;
    current=current_live_read(ainpath);
    allcurr=allcurr+*current;
    avgcurr=allcurr/i;
    printf("\n Current: %d AVG: %f", *current, avgcurr);
    //free(current);
    }

}
fscanf(file, "%4d", &curr);
当前实时读取(ainpath)是这样的:

int *current_live_read(char *ainpath)
{

    //ainpath=init_current();
    int curr;

    FILE *file = fopen(ainpath, "r");
    //free(ainpath);

    if(!file)
    {
        printf("Error opening file: %s\n", strerror(errno));
    }
    else
    {
        fscanf(file, "%4d", curr);
        fclose(file);
        //*current=curr;
    }

    free(file);


    return curr;
}

我知道指针可能有问题,但我不知道是哪一个,我能做些什么。

关闭
文件*
指针后,您可能无法释放它。从手册页:

刷新流,然后关闭与该流关联的文件。之后,函数释放与流关联的所有缓冲区。刷新意味着未写入的缓冲数据被写入文件,未读的缓冲数据被丢弃

因此,
fclose()
已经根据需要进行了清理,以防止内存泄漏。如果在该指针上调用
free()
,可能会损坏堆。所以只需删除
免费(文件)

此外,您必须将指针传递给
fscanf()
,如下所示:

void current_read(void)
{

    system(AINinit);

    char *ainpath;
    ainpath=init_current();

    int *current;
    float avgcurr=0;
    float allcurr=0;
    int i=0;

    while(1)
    {
    //sleep(1);
    i++;
    current=current_live_read(ainpath);
    allcurr=allcurr+*current;
    avgcurr=allcurr/i;
    printf("\n Current: %d AVG: %f", *current, avgcurr);
    //free(current);
    }

}
fscanf(file, "%4d", &curr);
否则,您将写入(伪)随机内存地址。通常最好检查
fscanf()
的返回值,查看转换是否成功,并正确处理错误情况


这应该可以消除这个问题。

所以我更改了
int*current\u live\u read(char*ainpath)
int current\u live\u read(char*ainpath)
无指针类型。 使内部功能:
int curr
fscanf(文件“%x”和&curr)
在主函数中,电流为整数:
int电流

现在出现了
fscanf(文件“%4d”,curr)
int*current\u live\u read(char*ainpath)
函数中。我有一个错误
没有可用的“\u IO\u vfscanf\u internal(),在0x432c4”
。可能
int*curr
的声明是错误的@Pukacza这确实是第二个问题,请参阅editNow the
fscanf(文件“%4d”,&curr)不将任何值传输到*curr。fscnf之后的值为NULL。您是否按照我的建议检查了fscanf的返回值?它应该是1,否则由于文件无效,转换失败format@Pukacza你需要学习指针是如何工作的。您必须先初始化它们,然后才能使用它们。另外,请注意不要在
文件上使用
free
。只能对它们调用
fclose