Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C语言中使用函数指针数组时的分段错误_C_Segmentation Fault - Fatal编程技术网

C语言中使用函数指针数组时的分段错误

C语言中使用函数指针数组时的分段错误,c,segmentation-fault,C,Segmentation Fault,我有以下代码: int main() { unsigned char c; enum state_t { state1, state2, state3 } states; enum state_t (*action[3])(char c); state=state1; initialize_state(action); } void initialize_state (enum state_t

我有以下代码:

int main()
{
    unsigned char c;
    enum state_t {
        state1,
        state2,
        state3
    } states;
    enum state_t (*action[3])(char c);

    state=state1;
    initialize_state(action);
}

void initialize_state (enum state_t  (*action[])(char c))
{
    action[state1]=func1;
    action[state2]=func2;
    action[state3]=func3;
}

我在
initialize_状态(action)时出现分段错误

由于segfault意味着对内存的非法引用,请检查以确保未传递无效的函数指针地址

您是否已通过调试器运行代码以准确找出故障所在?如果没有,我建议你这样做。您的代码片段未按原样编译


除了您的代码乱七八糟之外,例如没有原型声明并且在main下面声明了函数,或者在int main(void)中没有返回类型,main()中缺少void等等,我猜您可能也错误地声明了func1、func2、func3的返回类型。e、 g.
void func1(void){}

我不认为如果你想让函数返回它,
state\u t
可以是一个本地类型。试着让它全球化。事实上,就目前的情况来看,它甚至都不会编译。请发布一段正确的、经过良好测试的代码,准确地表示您的问题。
state
是一个拼写错误,我想应该是
states