抛出问题
今天在写程序的时候遇到了一个以前没有暴露出来的问题,问题如题目所示。下面写了一个小的测试程序,如下:
#include <stdio.h>
#include <stdlib.h>
int main(){
unsigned char *ua = (unsigned char*)malloc(sizeof(unsigned char) * 3);
char line[40] = "177 100 88";
sscanf(line, "%hhu %hhu %hhu", &ua[0], &ua[1], &ua[2]);
printf("ua[3] = {%hhu, %hhu, %hhu}\n", ua[0], ua[1], ua[2]);
if (ua){
free(ua);
}
return 0;
}
在debug模式下会有如下错误:
从提示可以看出来,是内存那块出了问题。大体意思是 C运行时检测到应用程序在堆缓存后写入了内存。
解决问题方案
经过调试,我发现,我在程序中分配的内存大小是3*sizeof(unsigned char)=3个字节,但是用sscanf写入的是6个字节的内存大小,所以最后释