gpt4 book ai didi

c - 如何防止 malloc.c 3096 SYSMALLOC : assertion failed while using fscanf to build an array from a port?

转载 作者:行者123 更新时间:2023-11-30 17:31:41 24 4
gpt4 key购买 nike

我正在编写一个从串行端口接收数据的解析程序,并且在执行时不断收到“malloc.c 3096 sSYSMALLOC 断言失败”。这是一个非常长的代码,因此为了让读者简单起见,我只包含了发生问题的部分。我可以确定该问题是由于使用 fscanf 将端口中的值写入 mdpu_parse 中而发生的,因为当我只是使用 scanf 测试结构以将值写入数组然后将它们存储在结构中时,代码之前就起作用了。这是代码:

       #include <sdtio.h>
#include <stdint.h>
#include <stdlib.h>
#include "mpdu_init.h"
#define BAUDRATE B115200
#define PORT "/dev/ttyS0"
main(){

char *mpdu_parse;
char npdu_parse[100];
char apdu_parse[500];
FILE *fp;
MPDU *mpdu = malloc(sizeof(mpdu));
*mpdu = init_mpdu();

mpdu_parse = calloc(7, sizeof(char));

fp = fopen(PORT, "r+");
check1: for(i=0 i< 7; i++){
fscanf(fp, "%02x", &mpdu_parse[i]);
}

fclose(fp);


if((mpdu_parse[0] == 0x55) && (mpdu_parse[1] == 0xFF)){

mpdu -> frame_type = mpdu_parse[2];
mpdu -> dest_addr = mpdu_parse[3];
mpdu -> source_addr = mpdu_parse[4];
mpdu -> length[0] = mpdu_parse[5];
mdpu -> length[1] = mpdu_parse[6];
mpdu -> data_crc = mpdu_parse[7];
goto check1;
}
else if((mdpu_parse[0] != 0x55) || (mpdu_parse[1] != 0xFF)){
print("invalid message\n");
goto check1;
}
}

我知道我在某个地方遇到了内存问题,但我看不出是什么导致了这个问题。任何帮助是极大的赞赏。

最佳答案

这定义了七个元素:

mpdu_parse = calloc(7, sizeof(char));

循环八次:

for(i=0 i<=7; i++)

所以这个

fscanf(fp, "%02x", &mpdu_parse[i]);

访问数组 mpdu_parse 超出最后一次迭代的范围。

要解决此问题,请执行以下操作

mpdu_parse = calloc(8, sizeof(char));

for(i=0 i<7; i++)

关于c - 如何防止 malloc.c 3096 SYSMALLOC : assertion failed while using fscanf to build an array from a port?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24493405/

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