C - 为什么当我读取时我的指针值会改变?

问题描述 投票:0回答:1

我有两个结构:

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
的地址发生变化,我无法再使用结构中的任何内容。为什么会出现这种情况呢?我假设我搞乱了指针的使用,但我不确定在哪里。

(对于缺乏信息,我深表歉意,我现在无法访问代码并且正在失去记忆)

我几乎只是将指针的使用与调试器结合使用,这就是我发现地址正在改变的方式。它并没有导致我的代码崩溃,但它确实会导致进一步的问题。

c pointers debugging struct embedded
1个回答
0
投票

我认为你应该在声明时初始化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;
}
© www.soinside.com 2019 - 2024. All rights reserved.