gpt4 book ai didi

c - 在函数内部传递内存分配指针?

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

我需要在程序中的许多不同位置分配结构数组,从而将工作放在一个函数中 (VS 2010)。编译器给出有关使用未初始化变量的警告。那么我如何传递它,以及如何在函数中声明它。我尝试了“&”和“*”的多种变体,但都无济于事。

(如果我的代码引起任何形式的恶心,我提前道歉......我是英语专业的。)

struct s_stream {
int blah;
};

void xxyz(void)
{
struct s_stream **StreamBuild;
char *memBlock_1;

xalloc(StreamBuild, memBlock_1, 20);
}



void xalloc(struct s_stream **StreamStruct, char *memBlock, int structCount)
{
int i = sizeof(struct s_stream *);
if ((StreamStruct=(struct s_stream **) malloc(structCount * i)) == NULL)
fatal("failed struct pointer alloc");

int blockSize = structCount * sizeof(struct s_stream);
if ((memBlock = (char *) malloc(blockSize)) == NULL)
fatal("failed struct memBlock alloc");

// initialize all structure elements to 0 (including booleans)
memset(memBlock, 0, blockSize);

for (int i = 0; i < structCount; ++i)
StreamStruct[i]=(struct s_stream *) &memBlock[i*sizeof(struct s_stream) ];
}

最佳答案

我不太确定我理解你的问题,但你似乎想要一个函数来创建一个动态分配的 struct s_stream 对象数组并将它们返回给调用者。如果是这样的话,那就很简单了:

void easiest(void)
{
struct s_stream *array = malloc(20 * sizeof(struct s_stream));
}

您可以将 malloc() 移到它自己的函数中并返回指针:

void caller(void)
{
struct s_stream *array = create_array(20);
}

struct s_stream *create_array(int count)
{
return malloc(count * sizeof(struct s_stream));
}

或者如果您坚持将数组作为参数传递:

void caller(void)
{
struct s_stream *array;
create_array(&array, 20);
}

void create_array(struct s_stream **array, int count)
{
*array = malloc(count * sizeof(struct s_stream));
}

关于c - 在函数内部传递内存分配指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8772662/

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