【发布时间】:2017-11-05 11:54:24
【问题描述】:
我无法让一段代码正常工作,我有一个使用带有本地缓冲区的函数的代码, 当初始化本地缓冲区时,我得到了异常,但是当没有任何初始化就声明它工作正常,我不明白为什么。 我还增加了链接器中的堆栈大小,但似乎这不是问题。
注意:我正在使用支持整个缓冲区初始化的 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
// ...
}
【问题讨论】:
-
您不能“使用 c99/c11 编译选项进行编译”。您可以在 C99 模式下构建,或在 C11 模式下构建。你不能两者都做,它们是相互排斥的。
-
“整个缓冲区初始化”是什么意思?在 C (C89, C99, C11) 中没有部分初始化。对象要么未初始化,要么完全(所有工作字节)初始化。
-
你在哪里得到异常?何时调用
UDS_RdbiManagement?别的地方?您使用调试器来定位您的代码中发生崩溃的位置? -
我认为您的意思是“初始化导致不同的未定义行为(预期与意外)”
-
您显示的代码中的任何内容都不会导致您描述的问题。见minimal, complete, and verifiable example。
标签: c exception linker stack stack-memory