이 프로그램은 UNIX 시스템에서 seg 오류를 발생시킵니다. 나는 원인을 memset()의 두 번째 호출로 좁혔다.memset을 호출하면 분할 오류가 발생합니다.
왜이 문제가 발생합니까? 코드의 첫 번째 "덩어리"는 두 번째 코드와 거의 같습니다. 그렇지 않습니까? 왜 첫 번째 memset segfault를 호출하지 않았습니까?
segfaulting memset 호출과 관련된 다른 스레드를 살펴 보았지만 그 중 아무 것도 이와 유사하지 않았습니다.
왜 그런 간단한 프로그램을 작성했는지 궁금한 경우, 필자가 작성한 다른 프로그램에서 구조에 memcpy()를 적용하는 방법을 가르쳐 줬습니다.
#include <stdio.h>
#include <stdlib.h>
typedef struct{
int x;
char text;
} FilesStruct;
int
main(int argc, char** argv)
{
FilesStruct *old_dir;
memset(old_dir,0,sizeof(FilesStruct));
old_dir->x = 3;
old_dir->text = 'c';
printf("old dir: %d,%c\n",old_dir->x,old_dir->text);
FilesStruct *new_dir;
memset(new_dir,0,sizeof(FilesStruct));
new_dir->x = 7;
new_dir->text = 'g';
printf("new dir: %d,%c\n",new_dir->x,new_dir->text);
return 0;
}
오을 할 수있는 포인터 또는 동적으로 할당 된 메모리가 필요하지 않습니다 . 그래서 내 선언은 포인터 만 선언하지만 기본 구조는 선언하지 않습니다. 따라서, 나는 0으로 memsetting하기 전에 메모리를 할당해야합니까? –
@Noob 네, 맞습니다. – simonc
도와 줘서 고마워요! –