当通过引用函数传递时分配结构和填充字段

我试图从指针给出结构的函数中填充结构字段。当通过引用函数传递时分配结构和填充字段

使用malloc分配结构后,返回的指针非空,并且结构字段已经很好地初始化,但是在返回到main之后。我传递给函数的指针是null。

这里一个简单的例子

#include <stdlib.h> 

#include <stdio.h>

#define INFO(fmt, args...) printf(fmt, ## args);

#define ERROR(fmt, args...) printf("In %s : " fmt, __func__, ## args);

typedef enum

{

ERR_OK = 0,

ERR_KO = -1,

ERR_MALLOC_FAIL = -2,

}error_t;

typedef struct

{

unsigned int field;

}test_struct;

int struct_constructor(test_struct* myStruct, unsigned int field)

{

myStruct = malloc(sizeof(test_struct));

if(NULL == myStruct)

{

ERROR("Error allocating memory for myStruct\n");

return ERR_MALLOC_FAIL;

}

INFO("passed field = %d\n", field);

myStruct->field = field;

INFO("struct field = %d\n", myStruct->field);

return ERR_OK;

}

int main(void)

{

test_struct* myStruct = NULL;

struct_constructor(myStruct, 1);

if(myStruct == NULL)

{

INFO("NULL structure in main\n");

}

}

这里是输出:

passed field = 1 

struct field = 1

NULL structure in main

我不明白为什么结构的指针不在函数内部空,为空主。
另外我不想返回指针,因为我使用返回码来检查函数中出现了什么问题。

回答:

那么,因为C是通过值,所以你所做的任何更改是本地指针变量。 main()与它无关。如果您返回该指针并将其分配给您想要更改的指针,则会起作用。

或传递它的地址并对原始变量进行更改。

struct_constructor(&myStruct, 1); 

而且

int struct_constructor(test_struct** myStruct, unsigned int field) 

{

*myStruct = malloc(sizeof(test_struct));

if(NULL == *myStruct)

{

ERROR("Error allocating memory for myStruct\n");

return ERR_MALLOC_FAIL;

}

INFO("passed field = %d\n", field);

myStruct->field = field;

INFO("struct field = %d\n", (*myStruct)->field);

return ERR_OK;

}

以上是 当通过引用函数传递时分配结构和填充字段 的全部内容, 来源链接: utcz.com/qa/265896.html

回到顶部