gpt4 book ai didi

c - 在结构中初始化数组

转载 作者:太空宇宙 更新时间:2023-11-04 08:28:23 25 4
gpt4 key购买 nike

所以我决定用 C 为微 Controller (如果重要的话是 PIC32)编写我自己的大整数库,但我遇到了一个我不明白的奇怪问题。当代码运行时,big_int_t结构ab在不同的内存位置,但是a->bytesb->bytes 似乎在同一位置(通过打印它们的指针来确认)。在 b->bytes 中设置值也会更改 a->bytes 中的值。在下面的 main 函数中,打印任一结构的 bytes 数组中的第一个元素显示 41。我做错了什么吗?

#include <stdint.h>
#include <stdio.h>

typedef struct {
uint8_t size;
uint8_t *bytes;
} big_int_t;

void big_init(big_int_t *big, uint8_t size) {
big->size = size;
uint8_t bytes[size];
big->bytes = bytes;
uint8_t i;
for(i=0;i<big->size;i++) big->bytes[i] = 0;
}

int main() {
big_int_t a,b;
big_init(&a,1);
big_init(&b,1);
a.bytes[0] = 16;
b.bytes[0] = 41;
printf("%d\n",a.bytes[0]);
printf("%d\n",b.bytes[0]);
}

最佳答案

big_init 中,变量 bytes 是一个本地 变量,它会超出范围并在函数返回后消失。存储在big->bytes 中的指针在函数返回时会变成杂散指针,解引用指针会导致undefined behavior。 .

您不能为此使用本地数组,而是需要使用 malloc 动态分配数组:

big->bytes = malloc(sizeof(*big->bytes) * big->size);

但不要忘记在用完后释放内存。

关于c - 在结构中初始化数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29430787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com