기존 배열에서 트리를 빌드하고 일부 속성을 사용하여 트리를 작성해야합니다. 내 문제는 건물 기능을 시작하려고 할 때 일부 세분화 오류가 있었기 때문에 그 일을 수행하는 방법 (일부 재귀 fuctions을 수행해야하며 괜찮습니다)에 관한 것이 아닙니다. 그래서 문제를 "격리"하려고했는데 나무의 루트 노드를 만들 때 그것을 가지고있는 것을 보았습니다. 나는 왜 내가 그 오류가 있었는지 이해할 수 없었다. (나는 잠시 동안 목록을 사용 해왔다. 왜냐하면 내가 전문가라고해도 포인터와 연결된 구조가 전혀 새로운 것이 아니기 때문이다.) 나는 무슨 일이 일어나고 있는지를 알기위한 아주 간단한 메인 코드를 작성하려고 시도했다. 그리고 나는 심지어 하나의 노드를 초기화 할 수 없다는 것을 알았다. 다음은 코드입니다.이상한 세그멘테이션 오류 C에서 포인터 사용
#include <stdio.h>
#include <stdlib.h>
typedef struct elem {
int info;
struct elem *p;
struct elem *left;
struct elem *right;
} tree;
typedef tree* tree_punt;
void fill(int *array, int size) {
int i;
for(i=0; i<size; i++) {
array[i] = i+1;
}
}
void show(int *array, int size) {
int i;
for(i=0; i<size; i++) {
printf("%d ", array[i]);
}
printf("\n");
}
int main() {
int *array;
int size;
size = 7;
fill(array, size);
show(array, size);
printf("array \"address\": %d\n", array);
tree_punt test;
printf("tree \"address\": %d\n", test);
test = (tree_punt)malloc(sizeof(tree));
test->info = 5;
printf("info: %d\n", test->info);
}
테스트 포인터로 malloc을 사용할 때 세그먼트 오류가 있습니다. 이상하게도 배열 안에 값을 넣지 않으면 아무런 문제가 없습니다. 왜? 배열이 왜 내 가난한 나무를 괴롭혀 야하나요?
int *array;
fill(array, size);
array
fill
에 전달하려고하는 것은 정의되지 않은 동작이 발생하지 않습니다
아마도'const int size = 7' –
정말 고마워요! 포인터를 가리키고있는 것에 대해 항상 생각해야만한다는 것을 – Mark
@ 마크 (mark). –