-1
我必須創建鏈接列表。在這些列表中,我將定義指向函數的指針。我的錯誤是每當我調用該函數時,我都得到了分段錯誤錯誤。在請,下面是我的代碼誰能幫助: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