簡體   English   中英

傳遞給函數的參數已損壞

[英]Corrupted arguments passed to function

我正在用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使用名為Yagarto的GCC的重新編譯版本。)

您很可能屬於不確定行為的領域,因為您在程序的其他地方做錯了什么。 它在某些情況下不能工作的事實使未定義的行為可以接受:-)

可能是您覆蓋了內存,或者您的字符串不是以null結尾的,或者是其他一百種原因。

您以某種方式破壞了parse函數的堆棧。 注釋掉command變量的聲明將刪除堆棧中20個字節的分配,如果保留該分配,則會隱式發生。

您可以在程序上嘗試Valgrind找出損壞發生的地方嗎?

另外,什么是print功能? 在兩種情況下嘗試打印start的值

printf("%p\n", start);

您可以在內存中由parse指向的地址處找到函數堆棧

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM