gpt4 book ai didi

c - 从 file.cfg 读取时出现 Segmentation_Fault 错误

转载 作者:行者123 更新时间:2023-12-04 19:29:24 25 4
gpt4 key购买 nike

嗨,我正在尝试编写代码,如何打印从配置文件中获取值的动态结构
这是包含网关数量的配置文件,对于每个网关,我们都有不同的参数

nbre_GW = "3" 
GW1 = "192.168.1.12;502;1;2;3"
GW2 = "192.168.1.13;505;5;6;45"
GW3 ="192.168.1.14;503;11;12;3"
我正在使用这种结构:
typedef struct {
char IP[12] ;
int port;
int slave [50] ;
} GW_t ;
执行代码时出现错误段错误
这个函数读取配置
int readConfig(int gw_nbr)
{
char tmpBuff[8];
char chaine [50] ;
config_t cfg;
const char * l_nbre = NULL;
const char * l_chaine = NULL;


config_init(&cfg);
printf("hello");
//printf("\r\n========================== READING FROM CONFIG FILE ==========================\r\n");

if (!config_read_file(&cfg, CONFIG_FILENAME)) {

fprintf(stdout, "Configuration file not found!");
config_destroy(&cfg);
return -1;
}

printf ("read config file");
if (!config_lookup_string(&cfg, "nbre_GW", &l_nbre)) {
fprintf(stdout, "No 'nbre_GW' setting in configuration file.\r\n");
config_destroy(&cfg);
return -1;
}

gw_nbr = atoi(l_nbre);

gwArray = (GW_t *) malloc (gw_nbr* sizeof(GW_t)) ;

for (int i =1 ; i<= gw_nbr ; i++)
{
sprintf(tmpBuff,"GW%d",i);
if (!config_lookup_string(&cfg, tmpBuff, &l_chaine)) {
fprintf(stdout, "No 'GW' setting in configuration file.\r\n");
config_destroy(&cfg);
return -1;
}

strcpy(chaine, l_chaine);

int len = strlen(chaine);

char d[] = ";";
printf ("first strtok");
char *p = strtok(chaine, d);

strcpy(gwArray[i].IP,p);

p = strtok(NULL, d);
gwArray[i].port = atoi(p);
int j =0 ;
while(p != NULL)
{
p = strtok(NULL, d);
gwArray[i].slave[j] = atoi(p);
j++ ;
}

}

}

最佳答案

这段代码有几个问题:

  • 您在 nbre_GW 中分配了三个项目(因为 gwArray 是 3) .
  • 你离开 gwArray[0]未触及,包含垃圾(calloc 将内存归零,但 malloc 不会)。
  • 你写信给 gwArray[3] ,从未分配过。
  • 该函数返回 -1 表示错误,但返回垃圾表示成功。

  • 因此,当程序试图解释 gwArray[0] 中的垃圾时,它可能会崩溃。 ,或者当任何内容被 gwArray[3] 覆盖时被读取,或者当它试图处理垃圾数量的网关时。如果不在调试器中运行整个程序,就无法判断,但这很可能是这些原因之一。

    关于c - 从 file.cfg 读取时出现 Segmentation_Fault 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68067225/

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