【发布时间】:2018-06-21 17:34:53
【问题描述】:
我正在编写一个在嵌入式 MCU 上运行的程序,因此我所有的内存分配都分配给了堆栈(没有 malloc())。我在函数中创建了一个结构并返回给调用者,我试图在返回之前将对该变量的引用保留在数组中。
问题是存储在数组中的变量似乎是返回给调用者的变量的副本,因此它们不同步。下面的代码说明了这个问题:
#include <stdio.h>
int *ARRAY_OF_VARIABLES[1];
int initalizeVariables() {
int i = 0;
ARRAY_OF_VARIABLES[0] = &i;
return i;
}
int main(void)
{
int test = initalizeVariables();
test = 1;
printf ("Test: %d, ARRAY_OF_VARIABLES[0]: %d\r\n", test, (int)*ARRAY_OF_VARIABLES[0]);
}
这会打印:Test: 1, ARRAY_OF_VARIABLES[0]: 0
如何在没有 malloc() 和指针的情况下使“test”和“ARRAY_OF_VARIABLES[0]”保持同步?
【问题讨论】:
-
你做不到。当函数返回时,它的局部变量全部被销毁。指向它们的指针变得无效。
-
如果您没有
malloc(),请使用全局变量,而不是局部变量。 -
你也可以使用
static int i = 0; -
另一个选项是在
main(或任何需要的范围级别)中创建变量并将指向它们的指针传递给initialize函数,以便initialize可以修改值. -
另外,澄清一下,
test接收本地变量i的副本,而ARRAY_OF_VARIABLES[0]包含指向原始变量的指针(但现在超出范围和垃圾)。