두 번째 이후에 많은 이미지를 실행하기 위해 프로그램을 만들고 싶습니다. 이렇게하려면 이름, 기간 및 경로가 포함 된 구조체 프레임을 만듭니다. 또한 구조체 프레임 포인터와 다음 프레임 포인터를 포함하는 link라는 다른 구조체를 만듭니다.구조체가 연결된 목록의 함수에서 반환 된 결과
그래서 사용자에게 이름, 기간 및 경로를 AddFrame 함수에 삽입하도록 요청합니다. 지금까지 함수 Create_frame은 나에게 이름과 길이를 반환하지만, struct List에 이것을 삽입하려고 할 때 프로그램 충돌로 인해 액세스 위반이 있습니다.
이
내 코드입니다 : 내 구조체 주에서struct Link
{
frame_t *frame;
struct Link *next;
};
typedef struct Link link_t;
struct Frame
{
char *name;
unsigned int duration;
char *path; // may change to FILE*
};
typedef struct Frame frame_t;
있습니다
struct frame_t* CreateFrame(char *name, unsigned int duration, char* path){
frame_t* Frame = (frame_t*)malloc(sizeof(frame_t));
if (Frame)
{
Frame->name = (char*)malloc(strlen(name)* sizeof(char) + 1);
strcpy(Frame->name, name);
Frame->duration = duration;
Frame->path = (char*)malloc(strlen(path)* sizeof(char) + 1);
strcpy(Frame->path, path);
}
else{
return (-1);
}
return Frame;
}
void AddFrame(link_t** start){
unsigned int duration = 0;
char name[MAX] = { 0 }, path[MAX] = { 0 };
link_t* current = NULL;
current = (link_t*)malloc(sizeof(link_t));
current = start;
if ((*start) == NULL)
{
printf("Please insert Frame Path: "); fflush(stdin); Myfgets(path, MAX);
printf("Please insert frame duration(in miliseconds):"); scanf("%d", &duration);
printf("Please choose a name for that frame: "); fflush(stdin); Myfgets(name, MAX);
current->frame = CreateFrame(name, duration, path);
current->next = NULL;
}
else{
while (current->next)
{
current = current->next;
}
current->frame = CreateFrame(name, duration, path);
current->next = NULL;
}
}
내가 가진 :
link_t* header = NULL;
AddFrame(&header);
이 줄 내 프로그램이 다운 : (* 시작) -> 프레임 = CreateFrame (이름, 기간, 경로);
"... 컴파일러가 나에게 말하기를 ..." "내 프로그램이이 줄에서 충돌합니다 ..."- 그래서 무엇입니까? 컴파일러 또는 프로그램이 충돌합니까? 정확하십시오. 좋은 질문을 쓰는 방법에 대해 [ask]를보고 [mcve]를 제공하십시오. – Olaf
그리고'malloc'과 C의 결과를 캐스팅하지 마라! 또한'sizeof (char)'는 ** '**'을 산출하기 위해 ** 정의됩니다. 도움이되는 것보다 쓸모없고 혼란 스럽습니다. – Olaf
'malloc (strlen (name) * sizeof (char) + 1)'은 의미가 없습니다. 여러분이'sizeof (char)'가> 1 일 수 있다고 생각하면'(strlen (name) + 1) * sizeof (char)'가 필요합니다. 또는 문자의 크기가 1이라고 생각하면'sizeof (char)'는 필요 없습니다. – melpomene