首页 > 解决方案 > 在函数中分配结构的 char** 成员

问题描述

我有一个包含 char** 的结构,我需要在函数中分配其成员,但以下分配不起作用:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct {
    char **clist;
} rule;

void assign(rule *rule) {
    char buf[128] = "hello";
    rule->clist[0] = buf;
}

int main()
{
    rule rule;
    rule.clist = malloc(sizeof(char*) * 8);

    assign(&rule);
    printf("%s\n", rule.clist[0]);

    return 0;
}

在 main 函数中进行如下分配是可行的:

char buf[] = "hello";
rule.clist[0] = buf;

标签: c

解决方案


char buf[128]是在assign函数的上下文中分配的堆栈。它不能以这种方式传递下去,因为函数返回后内存就消失了。你需要先使用char *buf;然后再做buf = malloc(128);


推荐阅读