我有一个结构,我已经使用指向struct的指针创建了该结构的两个示例,并且我希望它们根据输入返回两个不同的值。如果我在Visual Studio Code中执行此代码,我会看到int_struct_pt1和int_struct_pt2在内存中具有相同的地址。因此,当int_struct_pt2接收到它时,int_struct_pt1会被int_struct_pt2的相同值覆盖。
我正在使用STM32F4,所以我不想使用动态内存分配。有没有其他方法可以在不被覆盖的情况下获取这些数据,或者如何处理内存分配。
//int_struct.h
//Declaration in header file
typedef struct {
int a;
int b;
} int_struct;
int_struct * func(int a);
//int_app.c
//Pointer to struct in source file
static int_struct* int_struct_pt1;
static int_struct* int_struct_pt2;
int_struct_pt1 = func(10);
int_struct_pt2 = func(16);
//int_struct.c
static int_struct int_struct_app;
int_struct * func(int a ){
int_struct_st.a = a;
int_struct_st.b = 15;
return &int_struct_st;
}
字符串
谢谢
尝试创建不同的变量。检查并看到指针具有相同的内存地址。我的期望是在C中获得最好的方法来执行此功能而不会被覆盖。
2条答案
按热度按时间li9yvcax1#
您可以将
func
更改为初始化函数:字符串
在其他地方,为每个示例定义一个变量:
型
如果你真的需要使用指针变量:
型
调用函数初始化
int_struct
:型
或:
型
mcvgt66p2#
字符串
只有一个示例,如果你调用你的函数,它总是返回同一个对象的同一个地址。
你需要在每次调用这个函数的时候创建一个结构体:
通常(因为这是一个小型MCU医疗项目),你应该实现静态分配的memory pools分配器/释放器,它不会对堆进行碎片化。这是一个非常简单的实现示例:
型
或者使用malloc
型