导致分段错误的原因是什么?



我的程序中有一个segmentation fault错误。这是代码:首先,我有一个结构:

struct Slave
{
char **all_samples;
int number_of_samples;
char **last_samples;
int **RSSI;
int *AGC;
int *AUTH;
};

然后我有一个函数:(解窃我确定当我调用RSSI function时会发生分段错误)。all_sampleslast_samples是 2 个数组。第一个包含N字符串(N是可变的),而第二个肯定包含 4 个字符串。

struct Slave *read_slaves_file(char *file_path, char *slave)
{
...
char **all_samples = malloc(N * sizeof(char *));
char **last_samples = malloc(4 * sizeof(char *));

struct Slave *slave_ptr = malloc(sizeof(struct Slave *));
slave_ptr->last_samples = last_samples;
slave_ptr->all_samples = all_samples;
slave_ptr->number_of_samples = i;

slave_ptr->RSSI = RSSI(slave_ptr->last_samples);

return slave_ptr;
}

这是RSSI function: 它只是解析一个字符串以提取-RSSI单词后面的数字。例如:

2022-10-14 8:51:17:708 -IP 192.168.101.11 -RSSI 88367 -AGC 429496720 -AUTH 0

它提取88367.它适用于像这样的 4 个字符串。

int **RSSI(char **last_samples)
{
int **rssi_value = malloc(sizeof(int *) * 128);
char string[128];
const char s[16] = " ";
char *token;
int i;
for (int k = 0; k < 4; k++)
{
strcpy(string, last_samples[k]);
token = strtok(string, s);
i = 0;
while (token != NULL)
{
if (i == 5)
{
rssi_value[k] = atoi(token);
}
i++;
token = strtok(NULL, s);
}
}

return rssi_value;
}

进入main.c

#include "lib.h"
int main()
{
while (true)
{
...

struct Slave *slave_1 = read_slaves_file(FILE_PATH, SLAVE_1);
free(slave_1->last_samples);
free(slave_1->all_samples);
free(slave_1->RSSI);
free(slave_1);

usleep(1000*1000);
}
return 0;
}

此内存分配已无效

struct Slave *slave_ptr = malloc(sizeof(struct Slave *));
^^^^^^^^^^^^^^   

你需要写

struct Slave *slave_ptr = malloc(sizeof(struct Slave));
^^^^^^^^^^^^^^   

struct Slave *slave_ptr = malloc(sizeof( *slave_ptr ));
^^^^^^^^^^^^^   

也在这个 for 循环中

for (int k = 0; k < 4; k++)
{
strcpy(string, last_samples[k]);
//...

strcpy的调用使用未初始化的指针last_samples[k]

而这句话

rssi_value[k] = atoi(token);

也是不正确的。尝试使用整数初始化指针。

相关内容

  • 没有找到相关文章

最新更新