c - malloc 和 sizeof 时的段错误

标签 c segmentation-fault

对不起,如果我冒犯了任何人,但我这周开始学习 C,并且在编译时遇到了段错误。我可以请第二双眼睛来帮助我解决这个错误吗?

void Space(void *empty, size_p s)
{
    empty = malloc(s);
}

int main()
{
    int *p = NULL;
    Space(p, sizeof(p));
    *p = 7;

    return;
}

最佳答案

empty 只是一个指针变量 - 它包含“一些”地址,但在 Space 的上下文中它仍然是一个局部变量。如果你想更新 Spaceint *p 的值,你需要传递一个指向它的指针:


int main()
{
    int *p = NULL;
    Space(&p, sizeof *p);
    *p = 7;

    return;
}

void Space(void **empty, size_p s)
{
    *empty = malloc(s);
}

此外,您在调用 Space 时遇到了一个错误:Space(p, sizeof(p));

sizeof(p)int * 变量的大小,但您想分配 int 的大小,因为这就是您'存储在 p 中。所以那一行应该是: 空格(&p, sizeof *p);

关于c - malloc 和 sizeof 时的段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54964275/

相关文章:

c++ - MPI程序的段错误

c++ - 代码在 OS X 上运行,Codeblocks Vbox 中的段错误

c - 给出了段错误,为什么? (C)

c++ - 释放链表节点时出现段错误

c++ - brk(0) 是否花费了太多时间?

c - float 的平方

C编译器断言——如何实现?

来自 argc 的 C 段错误

c - 如何返回单词在行中的位置,C语言

c - 用于模块化 C 应用程序的资源