如何防止malloc.c 3096 sYSMALLOC:assertion在使用fscanf从端口构建阵列时失败?
我正在编写一个从串行端口接收数据的解析程序,并且我一直得到一个malloc.c3096 sYSMALLOC断言在执行时失败。这是一段很长的代码,因此为了读者的简单性,我只包含了问题发生的部分。我可以确定问题是由于使用fscanf将值从端口写入mdpu_parse引起的,正如我之前使用scanf测试结构时使用的代码一样,将值写入数组,然后将其存储在结构中。 代码如下:如何防止malloc.c 3096 sYSMALLOC:assertion在使用fscanf从端口构建阵列时失败?,c,malloc,scanf,calloc,C,Malloc,Scanf,Calloc,我正在编写一个从串行端口接收数据的解析程序,并且我一直得到一个malloc.c3096 sYSMALLOC断言在执行时失败。这是一段很长的代码,因此为了读者的简单性,我只包含了问题发生的部分。我可以确定问题是由于使用fscanf将值从端口写入mdpu_parse引起的,正如我之前使用scanf测试结构时使用的代码一样,将值写入数组,然后将其存储在结构中。 代码如下: #include <sdtio.h> #include <stdint.h>
#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++)
访问数组mpdu_parse out of bounds for the elast迭代
要解决这个问题,你也可以这样做
mpdu_parse = calloc(8, sizeof(char));
或
mpdu_parse = calloc(8, sizeof(char));
for(i=0 i<7; i++)