我遇到了这种荒谬的情况。我正在尝试从文件中读取数据。根据标签的类型,它将读取__uint16_t或__uint32_t。所以我在同一个类中有两个函数,可以根据需要调用它们。
void myclass::readL16()
{
char tmp[65] = {'\0'};
__uint16_t len;
myfile.read(tmp, sizeof(len));
memcpy(&len, &tmp[0], sizeof(len));
myfile.read(tmp, len);
printf ("%.*s", len, tmp);
}
void myclass::readL32()
{
char tmp[65] = {'\0'};
__uint32_t len;
myfile.read(tmp, sizeof(len));
memcpy(&len, &tmp[0], sizeof(len));
myfile.read(tmp, len);
printf ("%.*s", len, tmp);
}
这部分工作正常。
但是如果我将tmp []声明为不同的大小:例如
void myclass::readL16()
{
char tmp[16] = {'\0'};
...
}
void myclass::readL32()
{
char tmp[32] = {'\0'};
...
}
当我运行程序时,我遇到了中止陷阱6错误。为什么会这样呢?是不是tmp假设是各自功能的本地?