我正在编写一个从串口接收数据的解析程序,并且在执行时我不断收到“malloc.c 3096 sYSMALLOC断言失败”。这是一个非常长的代码,因此为了简化读者,我只包括发生问题的部分。我可以确定问题出现在某处,因为使用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;
}
}
我知道我在某个地方有内存问题,但我看不出是什么导致了这个问题。任何帮助是极大的赞赏。
答案 0 :(得分:0)
这定义了七个要素:
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++)