相同的代码在main()中工作,但在其他函数中不起作用

时间:2016-12-28 20:40:15

标签: c segmentation-fault

我怎么能在主函数中运行某些代码,但在函数中移动时会因分段错误而崩溃?有什么区别?

本作品:

#include <sys/capability.h>
#include <sys/types.h>

int
main() {


    cap_t caps;
    caps = cap_get_proc();
    cap_flag_value_t * val;
    cap_get_flag(caps, CAP_FOWNER, CAP_EFFECTIVE, val);
    cap_free(caps);


    return 0;
}

这不起作用:

#include <sys/capability.h>
#include <sys/types.h>

void
my_get_cap() { 
    cap_t caps;
    caps = cap_get_proc();
    cap_flag_value_t * val;
    cap_get_flag(caps, CAP_FOWNER, CAP_EFFECTIVE, val);
    cap_free(caps);
}

int
main() {
    my_get_cap();
    return 0;
}

1 个答案:

答案 0 :(得分:1)

您尚未初始化cap_flag_value_t * val; - 对cap_get_flag的调用写入它,然后它可能会/可能不会崩溃,具体取决于写入的内存位置。将这些行更改为:

cap_flag_value_t val;
cap_get_flag(caps, CAP_FOWNER, CAP_EFFECTIVE, &val);