【问题标题】:Mallocing structs in C [closed]在 C 中分配结构 [关闭]
【发布时间】:2016-05-27 22:23:40
【问题描述】:

当我为这样的结构分配内存时:

typedef struct _My_struct {
    int myInt;
} My_struct;

My_struct* tmp = (My_struct*)malloc(sizeof(My_struct));

然后我尝试在其中设置一些值,如下所示:

tmp->myInt = 0;

我的程序崩溃了。 在调试模式下运行时,我看到 tmp 中的所有值都是 NULL,因此它可能由于 NullPointerException 而崩溃。 为什么我不能正确分配内存?

【问题讨论】:

  • 我刚刚使用这个测试运行了你的代码:#include <stdlib.h> #include <stdio.h> typedef struct _My_struct { int myInt; } My_struct; int main(void) { My_struct* tmp = malloc(sizeof(My_struct)); tmp->myInt = 1424838; printf("%d\n", tmp->myInt); return 0; }。看起来不错,没有编译器警告,运行正常。所以错误必须在您的代码中的其他地方。顺便说一句,不要将 malloc() 结果转换为 C。
  • 不需要对生成的 malloc 调用进行类型转换。

标签: c memory struct


【解决方案1】:

您的代码正在运行。你甚至可以test it online。你一定有一些你没有告诉我们的错误或错误。

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

int main() {

    typedef struct _My_struct {
        int myInt;
    } My_struct;

    My_struct* tmp = malloc(sizeof(My_struct));

    tmp->myInt = 5;
    printf("Output: %d", tmp->myInt);

}

输出

Output: 5

【讨论】:

    【解决方案2】:

    我的错。忘记了#include &lt;stdlib.h&gt;。不过,我的编译器似乎并不在意,这很奇怪。 还是谢谢!

    【讨论】:

    • 我感觉编译器抱怨得很厉害,但你只是忽略了警告。如果没有任何警告,则需要使用 gcc 或 clang 调高警告级别 -Wall,使用 microsoft 调高警告级别 /W4。和往常一样,修复所有警告,否则你就是turnip
    • 这就是为什么你不应该转换malloc的结果。如果你把它排除在外,你会得到一个编译器警告。
    • 对。我将来会这样做。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2013-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 2014-10-29
    • 2014-01-09
    相关资源
    最近更新 更多