我有带有多个头文件和源文件的 ac 程序。运行时,程序给出分段错误。在使用“up”和“print variable”命令时,我发现函数“busntoint()”不能正常工作。
我有以下函数将长度为 n 的字符串从二进制转换为十进制:
unsigned int busntoint(int n, busn bus)
{
unsigned int value = 0;
int i;
for (i=0; i < n; i++) {
if (bus[i] == '1') value += (unsigned int)pow(2,(n-1-i));
}
return value;
}
unsigned int bus2toint(bus2 bus)
{
return busntoint(2, bus);
}
unsigned int bus32toint(bus32 bus)
{
return busntoint(32, bus);
}
然后我编写了另一个程序来检查这些功能的工作情况。它工作得很好,并给出了正确和预期的输出。我不知道为什么它在“更大”的程序中不能正常工作。
如果有用,下面是变量的定义:
typedef char bus2[3];
typedef char bus3[4];
typedef char bus5[6];
typedef char bus6[7];
typedef char bus8[9];
typedef char bus16[17];
typedef char bus32[33];
“大”程序中函数的用法如下:
int LoadMemory(char * binfilename, bus8 memory[4096])
{
//some code
int addr = bus32toint(line);
setbit8(memory[addr], &line[33]);
//some code
}
gdb 中的 p addr 给出垃圾值,导致内存中的分段错误[addr]。