繁体   English   中英

C 动态 Memory 段错误

[英]C Dynamic Memory Segmentation Fault

我正在为学校完成这项作业,想知道为什么我不断收到有限 state 机器的动态 memory 分配的分段错误。 我已经创建了相同的 memory 分配和自由函数,但是我仍然收到分段错误,即使我的 main 只一个接一个地包含它们。 我想知道是否有人可以帮助我? 谢谢:)

总机 function:

int main(int argc, char** argv) {
    
    if(argc < 2 || argc > 2 || atoi(argv[1]) > MAX_STATE_MACHINE_NO)
    {
        printf("Error: Invalid input arguments\n");
        exit(1);
    }

    int stateMachineNumber;

    stateMachineNumber = atoi(argv[1]);
    StateMachine** stateMachines = malloc(sizeof(StateMachine*) * stateMachineNumber);

    stateMachineAllocation(stateMachines, stateMachineNumber);
    //grabInputs(stateMachines, stateMachineNumber);
    freefunction(stateMachines, stateMachineNumber);


    return 1;
}

Memory分配function:

void stateMachineAllocation(StateMachine** stateMachines, int stateMachineNumber)
{

    for(int i = 0; i < stateMachineNumber; i++)
    {   
        stateMachines[i] = (StateMachine*)malloc(sizeof(StateMachine));
        stateMachines[i]-> states = malloc(sizeof(State)*MAX_STATE_NO);

        for(int j = 0; j < MAX_STATE_MACHINE_NO; j++)
        {
            stateMachines[i]-> states[j] = (State*)malloc(sizeof(State));

            for(int w = 0; w < 4; w++)
            {
                stateMachines[i]-> states[j]-> connectedStates[w] = (State*)malloc(sizeof(State));
            }
        }
    }
}

免费 memory function:

void freefunction(StateMachine** stateMachines, int stateMachineNumber)
{

     for(int i = 0; i < stateMachineNumber; i++)
    {
        for(int j = 0; j < MAX_STATE_NO; j++)
        {
            for(int w = 0; w < 4; w++)
            {
                free(stateMachines[i]-> states[j]-> connectedStates[w]);
            }

            free(stateMachines[i]-> states[j]);
        }

        free(stateMachines[i] -> states);
        free(stateMachines[i]);
    }

    free(stateMachines);
}

谢谢大家,我对 C 比较陌生,所以这会很有帮助。

一件看起来不对的事情是:

StateMachine** stateMachines = malloc(sizeof(StateMachine*) * stateMachineNumber);

如果你打算有一个状态机块,你可能应该使用:

StateMachine* stateMachines = malloc(sizeof(StateMachine*) * stateMachineNumber);

这将返回多个 state 机器的 memory 地址,一个接一个地返回 memory(实际上是一个 state 机器的数组)。

您目前正在将其分配给编译器解释为指向第一个状态机的指针的指针,这可能不是您想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM