我有两个结构:
typedef struct configInfo_s{
uint8_t txRx;
uint8_t frameLen;
etc...
} configInfo_t;
和
typedef struct testData_s{
configInfo_t config;
uint32_t buf[6];
etc...
}testData_t;
我还有两个功能:
void test(testData_t *testData){
uint32_t out[6] = {0};
func2(&(testData->config), buf, out);
}
void func2(configInfo_t *config, uint32_t buf[6], uint32_t out[6]){
mcuPeripheral.stat.len = config->frameLen;
}
这是 main 的相关部分:
void main(void){
testData_t testData;
test(&testData)
当我输入 func2 并尝试设置
mcuPeripheral.stat.len = config->frameLen
时,config
的地址发生变化,我无法再使用结构中的任何内容。为什么会出现这种情况呢?我假设我搞乱了指针的使用,但我不确定在哪里。
(对于缺乏信息,我深表歉意,我现在无法访问代码并且正在失去记忆)
我几乎只是将指针的使用与调试器结合使用,这就是我发现地址正在改变的方式。它并没有导致我的代码崩溃,但它确实会导致进一步的问题。
我认为你应该在声明时初始化testData。我在下面的代码中没有发现任何问题。
#include<stdio.h>
#define uint8_t unsigned char
#define uint32_t unsigned int
typedef struct configInfo_s{
uint8_t txRx;
uint8_t frameLen;
} configInfo_t;
typedef struct testData_s{
configInfo_t config;
uint32_t buf[6];
}testData_t;
void func2(configInfo_t *config, uint32_t buf[6], uint32_t out[6]){
uint8_t len = config->frameLen;
// mcuPeripheral.stat.len = config->frameLen;
printf("len =%d", len);
}
void test(testData_t *testData){
uint32_t buf[6] = {0};
uint32_t out[6] = {0};
func2(&(testData->config), buf, out);
}
void main(void) {
testData_t testData = {0};
test(&testData);
return;
}