C getgrnam()是否无缘无故导致错误?

C getgrnam()是否无缘无故导致错误?,c,linux,C,Linux,我犯了一个毫无意义的错误。我有以下代码- #include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <grp.h> gid_t groupIdFromName(const char *name) { struct group *grp; gid_t g; char *endptr; if (name == NULL || *nam

我犯了一个毫无意义的错误。我有以下代码-

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <grp.h>

gid_t groupIdFromName(const char *name)
{
    struct group *grp;
    gid_t g;
    char *endptr;

    if (name == NULL || *name == '\0')
        return -1;

    g = strtol(name, &endptr, 10);
    if (*endptr == '\0')
        return g;

    grp = getgrnam(name);
    if (grp == NULL)
        return -1;

    return grp->gr_gid;
}

int main(int argc, char** argv) {
  return (EXIT_SUCCESS);
}

如果我注释掉行
grp=getgrnam(name)此错误消失。但是我不明白为什么这一行会导致它失败,特别是因为我的主方法是空的。

我发现很多人在NetBeans和Code::Blocks中已经经历了相当长的一段时间这个错误。我在Eclipse中尝试了这段代码,效果很好。因此,我的建议是不要在Linux上使用NetBeans进行C开发。

调试器说了什么?你到底在哪里调用函数groupIdFromName?我可以用gcc编译这个程序,并毫无问题地运行它。这里的代码只返回
(退出\u成功)在main()中。实际代码是什么样子的?如果您取消引用未初始化的
grp
指针(即
return grp->gr_gid;
),如何通过注释来消除“错误”?这肯定是巧合。
Signal received: SIGSEGV (?) with sigcode ? (?)
From process: ?