C BeagleBone上的分段错误SIGSEGV错误
我仍然对C代码中的分段错误有问题。当我调用函数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;
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 thefscanf(文件“%4d”,&curr)代码>不将任何值传输到*curr。fscnf之后的值为NULL。您是否按照我的建议检查了fscanf的返回值?它应该是1,否则由于文件无效,转换失败format@Pukacza你需要学习指针是如何工作的。您必须先初始化它们,然后才能使用它们。另外,请注意不要在文件上使用free
。只能对它们调用fclose
。