gpt4 book ai didi

c - 在C中为结构成员指针分配内存

转载 作者:行者123 更新时间:2023-11-30 16:57:19 25 4
gpt4 key购买 nike

我有一个包含成员的结构,我需要通过引用将其传递给函数。在该函数中,我想分配内存并分配一个值。我在某个地方遇到了问题 - 似乎在代码从 allocateMemory 返回后,我分配的内存和我分配的值超出了范围(这可能不完全是正在发生,但似乎确实如此)。

#include <stdio.h>
#include <stdlib.h>

typedef struct myStruct_t
{
char *myString;
} myStruct;

void allocateMemory(void *str);

int main(void) {
myStruct tmp = {
.myString = NULL
};
myStruct *p = &tmp;

allocateMemory(p->myString);
//allocateMemory(&(p->myString)); //also tried this

printf("%s", p->myString);

return 0;
}

void allocateMemory(void *str)
{
str = malloc(8);

((char *)str)[0] = 'a';
((char *)str)[1] = 0;
}

如果我在 allocateMemory 中打印 str 的值,则成功打印“a”,但如果我尝试打印 p->myStringmain 中,我的字符串是空的。

谁能告诉我我做错了什么?

最佳答案

您需要传递结构成员的地址,然后可以对其进行更改(也称为分配内存)。在您的函数版本中,您没有获取指针而不是指针的引用,因此您可以更改指针引用的内存内容,但不能更改指针本身。

所以将你的函数更改为

void allocateMemory(char **ret_str)
{
char *str = malloc(8);

str[0] = 'a';
str[1] = 0;
*ret_str = str;
}

然后将其称为

allocateMemory(&p->myString)

关于c - 在C中为结构成员指针分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39585111/

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