リンクリストを作成する必要があります。これらのリストでは、関数へのポインタを定義します。私のエラーは、私が関数を呼び出すたびに、私はセグメンテーションフォールトエラーがあります。誰もが、以下の、その中で助けてくださいすることができます私のコードです:C:structre内の関数へのポインタがセグメンテーションフォールトを起こす
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct CommandStructure{
char CommandName[10];
char ShortKey;
void (* CommandAction)(void);
} CommandFrame;
typedef struct LinkedCommandsStructure{
CommandFrame * Entity;
struct LinkedCommandsStructure * NextCommand;
} Firmware_Command;
void PrintSEQHelp(){
printf("HelloPrint \n");
}
CommandFrame * SEQ_Help(){
CommandFrame * Entity = malloc(sizeof(Entity));
strcpy(Entity->CommandName, "help");
Entity->ShortKey = 'h';
Entity->CommandAction = PrintSEQHelp;
return Entity;
}
Firmware_Command * SEQ_CommandsInit(){
Firmware_Command * HeadOfCommands = malloc(sizeof(HeadOfCommands));
Firmware_Command * HelpCommand = malloc(sizeof(HelpCommand));
HelpCommand->Entity = SEQ_Help();
HelpCommand->NextCommand = NULL;
HeadOfCommands = HelpCommand;
return HeadOfCommands;
}
void callcommand(Firmware_Command * ActiveCommands){
ActiveCommands = malloc(sizeof * ActiveCommands);
printf("inside callcommand \n");
(ActiveCommands->Entity->CommandAction)();
}
int ModulesInit() {
int ParseRet;
Firmware_Command * ActiveCommands = malloc(sizeof(ActiveCommands));
ActiveCommands = SEQ_CommandsInit();
callcommand(ActiveCommands);
return 1;
}
void main(void){
int cmdInitRet;
cmdInitRet = ModulesInit();
}
デバッグを行う必要があります。 –
私は – moibrahim
CommandFrame * Entity = malloc(sizeof(Entity)); ' - >' CommandFrame * Entity = malloc(sizeof(* Entity)); 'など多くの同様の間違いがありました。 – BLUEPIXY