为结构内的 C 字符串分配内存

Ben*_*Ben 0 c malloc struct pointers char

我目前有以下代码。

    struct qnode
    {
        char *path;
        struct qnode *next;
    }

    typedef struct qnode Node;
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在 struct qnode 中为 for 分配空间时,我的代码此时失败了。

void add(Node *front, Node *back,char **path)
{
    /* Create the new node */
    Node *cur = (Node *)malloc(sizeof(Node));

    /* Verify node successfully created */
    if(cur)
    {
            /* Populate Members of Node */
            cur->path = malloc(strlen(*path)); /* fails here */
            printf("Malloc path success");
            cur->path = *path;
Run Code Online (Sandbox Code Playgroud)

我已经验证 strlen 确实在正确的指针上运行并且它确实返回了大小的长度。出于某种原因,尽管此时我遇到了分段错误,但我不明白为什么。

仅供参考,这是分配的一部分,但是这条简单的 malloc 行不是专门分配的,也不是使用 C 语言。我被允许在作业中使用 C++,但我选择了 C 来获得更多关于该语言的知识。

谢谢您的帮助!

Dav*_*nan 5

您没有分配足够的内存。您需要为零终止符留出空间。您还必须复制字符串的内容,而不是将指针分配给字符串。这两个错误都会导致堆损坏并解释您的错误。代码应该是这样的:

cur->path = malloc(strlen(*path)+1);
printf("Malloc path success");
strcpy(cur->path, *path);
Run Code Online (Sandbox Code Playgroud)

strdup如果您的系统可用,您当然可以使用它,但请注意,它不是标准 C 的一部分。

  • 本,你需要调查你的调查。strlen 绝对不应该计算终止的 '\0'。 (2认同)