gpt4 book ai didi

c - 整个缓冲区初始化导致异常

转载 作者:太空宇宙 更新时间:2023-11-04 03:22:18 25 4
gpt4 key购买 nike

我无法让一段代码正常工作,我有一段代码使用带有本地缓冲区的函数,当本地缓冲区被初始化时,我得到了异常,但是当它在没有任何初始化的情况下声明时它工作正常,我不明白为什么。我还在链接器中增加了堆栈大小,但似乎这不是问题所在。

注意:我正在使用支持整个缓冲区初始化的 c99/c11 编译选项进行编译。

#define UDS_SRV_CFG2_MAX  20

NCS_PRI_FCT tUdsStatus UDS_RdbiManagement(u16 *puwLen, u8 *aubUdsData) {

tUdsStatus eUdsStatus;
u8 ubTableCfgIdx[UDS_SRV_CFG2_MAX] = { 0 }; // this leads to exception
//...
}

NCS_PRI_FCT tUdsStatus UDS_RdbiManagement(u16 *puwLen, u8 *aubUdsData) {

tUdsStatus eUdsStatus;
u8 ubTableCfgIdx[UDS_SRV_CFG2_MAX]; // code works fine here
// ...
}

最佳答案

感谢您的回答,问题实际上是堆栈对齐,这会导致异常,因为平台的堆栈对齐是 4 字节,20 字节缓冲区通过测试,但 15 字节缓冲区由于编译器对齐错误而失败并出现异常.这是通过为未对齐堆栈添加编译选项并在硬件中激活正确的标志来解决的。

纳比尔,

嵌入式/电子系统工程师。

关于c - 整个缓冲区初始化导致异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44356560/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com