【发布时间】:2020-02-02 16:58:29
【问题描述】:
如何在另一个函数中为结构分配内存,而不是在哪里声明结构变量?
typedef struct{
char *IP_req;
} ARGS;
int main(int argc , char *argv[]){
ARGS *args = NULL;
mal(argc, argv, &args);
printf("arg IP:%s\n", &args->IP_req);
return 0;
}
我要分配的函数:
int mal(int argc , char *argv[], ARGS *args){
args=malloc(sizeof (ARGS));
args->IP_req = (char*)malloc(sizeof(char) * 200);
strcpy(args->IP_req,"12.21.51.88");
printf("arg IP:%s\n", args->IP_req);
return 0;
}
当我编译这个程序时,我得到:
arg IP:12.21.51.88
arg IP:(null)
但我期望(并且想要):
arg IP:12.21.51.88
arg IP:12.21.51.88
【问题讨论】:
-
mal是什么?ARGS是什么? -
mal 代表 malloc,ARGS 是程序参数。我将程序减少到最低限度...
-
打开编译器警告:
ARGS *args必须是ARGS **args,然后是*args=malloc(sizeof (ARGS)); -
抱歉,我忘记包含我的结构 (ARGS)。我编辑了帖子,请看...
-
解释:通过
&args传递变量的地址,所以函数必须取消引用它以将分配的内存放入变量中。
标签: c function malloc dynamic-memory-allocation