0
我試圖從指針給出結構的函數中填充結構字段。當通過引用函數傳遞時分配結構和填充字段
使用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代碼中非常常見的錯誤。這是一個很多重複的結局。 –