我正在用 C 为嵌入式设备(STM32)编写可执行文件。经过一些调试,我将其简化为以下功能:
char * parse(char * start)
{
int i = 0;
char command[20];
print(start);
}
出于某种原因,当我调用此函数时,参数 start
已损坏。现在,如果我注释掉 command
初始化,我就可以让它工作了:
char * parse(char * start)
{
int i = 0;
// char command[20];
print(start);
}
注释掉 command
后,一切正常。我的想法是,也许我的 RAM 可能快用完了。但这个程序很小,在检查堆栈指针寄存器后,我可以确认我还有很多 RAM 空间。
这里可能出了什么问题?损坏的编译器? (我正在为 ARM 使用 GCC 的重新编译版本,称为 Yagarto。)
最佳答案
很可能您处于未定义行为区域,因为您在程序中其他地方 做错了。它在某些情况下工作的事实决不会使未定义的行为可以接受 :-)
可能是您覆盖了内存或者您的字符串没有以 null 结尾,或者其他一百种原因中的任何一种。
关于传递给函数的参数损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9926263/