在C中为堆分配struct

参见英文答案 > How to malloc inside a function and return pointer in C?                                    3个
>            C: adding element to dynamically allocated array                                    3个

#include <stdio.h>
#include <stdlib.h>

struct myStruct
{
    int number;
};

void
allocateMem(struct myStruct *struct1)
{
    struct1 = malloc(sizeof(struct myStruct));
    struct1->number = 500;
    printf("struct1->number: %d\n", struct1->number);
}

int
main(int argc, char *argv[])
{
    struct myStruct *struct1 = NULL;
    allocateMem(struct1);
    printf("number: %d\n", struct1->number);
    return 0;
}

您好,StackOverflow的公民,我寻求您的帮助.

我想要做的是使用堆空间而不是堆栈空间分配结构;我正在尝试在函数内部进行分配.无论我多么混乱,我总是得到一个分段错误或几个编译器警告.

我在这里做错了什么,但我无法弄清楚是什么,我一直在StackOverflow和一般的互联网试图找到一个与我的问题有关的例子或帖子,但我没有发现任何东西.

如果你能告诉我我做错了什么,或者只是指出我正确的方向,我将非常感激.

感谢大家的快速准确回复.你是对的,我需要一个指针指针,我的代码现在可以帮助你.

最佳答案
在这个功能中,

void
allocateMem(struct myStruct *struct1)
{
    struct1 = malloc(sizeof(struct myStruct));
    struct1->number = 500;
    printf("struct1->number: %d\n", struct1->number);
}

struct1按值传递.您在函数中对它所做的任何更改都不会从调用函数中看到.

一个更好的选择:

struct myStruct* allocateMem()
{
    struct myStruct *struct1 = malloc(sizeof(struct myStruct));
    struct1->number = 500;
    printf("struct1->number: %d\n", struct1->number);
    return struct1;
}

将调用函数更改为:

int
main(int argc, char *argv[])
{
    struct myStruct *struct1 = allocateMem();
    printf("number: %d\n", struct1->number);

    // Make sure to free the memory.
    free(struct1);

    return 0;
}

转载注明原文:在C中为堆分配struct - 代码日志