나는 그 노드 구조 이제우리에게 약간의 위치로 포인터를 들고 노드의 사용 가능한 메모리를 어떻게
struct node
{
char *p;
struct node *next;
}*start;
아래 주어진 우리가 *는 char p는 malloc에 call.Similarly에 의해 할당 된 메모리 위치에 대한 포인터를 링크 목록을 가지고 전체는 또한 malloc을 사용하여 할당됩니다. 이제
main()
{
struct node *tmp;
tmp=malloc(sizeof(struct node));
tmp->next=NULL;
tmp->p=malloc(2*sizeof(int));
free(tmp->p);
free(tmp);
}
아래에 이런 일이 여기에 필요한 메모리를하거나 뭔가를 올바른 방법인가를 malloc을 호출 모두가 차지하는 공간을 확보 하시겠습니까?
그렇습니다. 포인트 tmp-> p-NULL에 대해서는 문제가 없지만, tmp-> p = NULL 명령문을 사용하지 않으면 세그먼테이션 오류가 발생할 가능성이 있습니까? –
아니요이 경우 매달려있는 포인터를 역 참조하지 않으므로 segfault의 가능성이 없습니다. 코드에 매달려있는 포인터가있는 것만으로는 segfault가 발생하지 않습니다. Segfault는 정직한 실수로 인해 매달려있는 포인터를 사용하려고 할 때 발생합니다. 노드를 해제 한 후 노드 내부에서 포인터 p를 역 참조하려고하면 segfault가 발생할 수 있습니다. 이런 식으로 segfault -> free (tmp-> p)가됩니다. * (tmp-> p); // segfault. – Ameliorator
나는이 문장을 인쇄하려고 시도했다. * (tmp-> p) 아직 세그먼테이션 결함 –