segfault 때문에 컴파일 할 수 없습니다. 최대 용량을 표시하기 위해 트리 사분면을 사용하면 오류가 발생합니다. 이상하게도 기능 사분원 내부에서 작동하지만 삽입 점에서는 작동하지 않습니다. 트리 생성 기능은 훌륭하고 사분면입니다. 그러나 트리 쿼드런트 내부에있는 항목에 액세스하려고하면 (사분면이 NULL이 아니며 이전에 체크) segfault 문제 알림을 계속 실행합니다. 나는 그것이 매우 단순한 오류라고 두려워하지만 그것이 무엇인지 알 수 없다. 나는 인터넷에서 검색을 시도했지만 아무 것도 발견하지 못했지만이 전체 프로그램을 수행하는 데 시간이 부족합니다. 아무도 도와 줄 수 있습니까? 다만, 예를 들어, C - 이상한 Seg 오류 오류
#include <stdlib.h>
#include <stdio.h>
#include <float.h>
#include <limits.h>
typedef struct dot{
double x;
double y;
}Dot;
typedef struct quadrant{
int max_capacity, used_capacity;
Dot max,min;
Dot * dots_;
}Quadrant;
typedef struct quad_node * Quad_node_Pointer;
typedef struct quad_node{
Quadrant * key;
Quad_node_Pointer child[4];
Quad_node_Pointer father;
}Quad_node;
typedef struct tree{
Quad_node * end_;
Quad_node * start_;
}Tree;
void insert_dot(Tree * A, Dot b){
printf("lalala\n");
Quad_node * Aux, *Aux2, * New_leafs[4];
Dot min_aux,max_aux;
int i;
Aux=(Quad_node_Pointer) malloc (sizeof(Quad_node));
Aux2=(Quad_node_Pointer) malloc (sizeof(Quad_node));
printf("lalala\n");
//Here's the segfault line:
printf("this doesnt works %i",A->start_->key->max_capacity);
void Create_quadrant (Quadrant * A, int capacity, Dot max, Dot min){
A=(Quadrant*)malloc(sizeof(Quadrant));
A->dots_ = (Dot*) malloc (capacity * sizeof(Dot));
int i;
for (i=0;i<capacity;i++){
A->dots_[i].x=-1;
A->dots_[i].y=-1;
}
A->max_capacity=capacity;
//But here it works perfectly. What's the diference from the other that do
//a segfault?
printf("\n this works \n %i \n",A->max_capacity);
A->used_capacity=0;
A->max.x=max.x;
A->max.y=max.y;
A->min.y=min.y;
A->min.x=min.x;
}
void Create_tree (Tree * A, int capacity){
int i;
Dot max,min;
max.x=DBL_MAX;
max.y=DBL_MAX;
min.x=0;
min.y=0;
A->end_ = (Quad_node_Pointer) malloc (sizeof(Quad_node));
A->start_=(Quad_node_Pointer) malloc (sizeof(Quad_node));
for (i=0;i<4;i++){
A->start_->child[i]=A->end_;
}
A->start_->father=A->end_;
Create_quadrant(A->start_->key,capacity,max,min);
}
여기 메인있어 : 다음은 코드의
int main(int argc, char *argv[])
{
Tree * A;
int i;
A = (Tree*) malloc (sizeof(Tree));
Dot b,teste[10];
b.x=5.0;
b.y=6.0;
Create_tree(A,8);
for (i=0;i<10;i++){
teste[i].x=(double)2.0*i;
teste[i].y=(double)2.0*i;
insert_dot(A,teste[i]);
}
insert_dot(A,b);
free(A);
return EXIT_SUCCESS;
}
감사를 읽거나/나를 도와.
편집 : 기억하기 만하면 나는 잊었다. 삽입 점 기능이 가득 차 있지 않습니다. 초점은 segfault 문제입니다. 그리고 주된 기능은 전체 기능을 기반으로 실행되는 예제입니다. 죄송합니다. 하지만 내 문제는 지금이 이상한 segfault입니다. 나는 함수의 나머지 부분이 괜찮다고 생각하고, 더 간단한 (그리고 나머지 함수와는 관련이 없다) 질문을 생략하기 위해 생략했다.
Segfaults는 컴파일 타임이 아닌 런타임에 발생합니다. GDB를 사용하여 디버깅을 시도하거나 Valgrind를 실행하십시오. –
10 개가 넘는 요소를 반복하고 있기 때문에'Create_tree (A, 8)'이 빨리 보이지 않습니다. 'Create_tree (A, 10)'시도 – dchhetri
디버깅했습니다. 오류가 켜져 있습니다 : // 여기에 segfault 줄이 있습니다 : printf ("this doesnt works % i", A-> start _-> key-> max_capacity); 하지만 왜 액세스 할 수 없거나 tree quadrant의 max_capacity를 인식하지 못하는지 알 수 없습니다. –