传递给函数的参数损坏

标签 c embedded

我正在用 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/

相关文章:

c - 使用堆内存调试c

python - `gcc`哪个版本支持 `--no-undefined`开关?

c - 链表从小到大排序

python - 为低系统资源的嵌入式系统优化 Python 运行时指南

c - micium 的 printf 函数

c - 我如何才能看到 ar -s 正常工作?

c - Ubuntu 16.04上没有 "renameat2"系统调用功能

embedded - 为什么要使用 GPIO?

c++ - 允许堆分配短期范围内的对象以确保内存碎片的自由

C++ 标准特性和二进制大小