前提・実現したいこと
配列をスワップソートとバブルソートで整列するプログラムを作成しています。作成したプログラムを実行するとsegmentation fault と表示されてしまいます。おそらくポインタの使い方が間違っている気がするのですが、どこが違っているのかいまいち分かりません。申し訳ないのですがどなたか教えていただけないでしょうか。
発生している問題・エラーメッセージ
segmentation faule
エラーメッセージ
該当のソースコード
C
1#include <stdio.h> 2#include <stdlib.h> 3#include <math.h> 4#include <time.h> 5 6#define N 1000000 7 8typedef struct _point { 9 int x[10]; /* 0, 1, 2, 3 のいずれかの値 */ 10} POINT; 11 12POINT* A[N]; 13int count_bubble = 0; 14int swap_bubble = 0; 15int count_quick = 0; 16int swap_quick; 17 18void crear_the_point(int n) 19{ 20 for (int t = 0; t < n; ++t) 21 { 22 A[t] = 0; 23 } 24} 25 26float pointcmp(POINT* p1, POINT* p2) { 27 int i; 28 float q1 = 0.0, q2 = 0.0; 29 for (i = 0; i < 10; i++) { 30 q1 += pow(p1->x[i], 2); 31 q2 += pow(p2->x[i], 2); 32 } 33 q1 = sqrt(q1); 34 q2 = sqrt(q2); 35 36 return q1 - q2; 37} 38 39void swap(int a, int b) 40{ 41 POINT* temp; 42 temp = A[a]; 43 A[a] = A[b]; 44 A[b] = temp; 45} 46 47void sortBubble() 48{ 49 int i, j; 50 for (i = 0; i < N - 1; i++) 51 { 52 for (j = N - 1; j > i; j--) 53 { 54 ++count_bubble; 55 if (pointcmp(A[i], A[j]) > 0) 56 { 57 swap(i, j); 58 ++swap_bubble; 59 } 60 } 61 } 62} 63 64POINT* create_point() 65{ 66 POINT* p; 67 p = (POINT*)malloc(sizeof(POINT)); 68 int i; 69 for (i = 0; i < 10; i++) { 70 p->x[i] = (double)rand() / ((double)RAND_MAX + 1.0) * 3; 71 } 72 return p; 73} 74 75void creat_bb(int n) 76{ 77 for (int i = 0; i < n; ++i) 78 { 79 A[i] = create_point(); 80 } 81} 82 83int partition(int m, int n) 84{ 85 for (int i = m; i < n; ++i) 86 { 87 if (pointcmp(A[i], A[n]) < 0) 88 { 89 swap(m, i); 90 ++swap_quick; 91 ++m; 92 } 93 } 94 swap(n, m); 95 ++swap_quick; 96 return m; 97} 98 99 100 101void quick_sort(int t, int s) 102{ 103 int aa; 104 if (t < s) 105 { 106 aa = partition(t, s); 107 quick_sort(t, aa - 1); 108 quick_sort(aa + 1, s); 109 } 110} 111 112int main(void) 113{ 114 int n; 115 clock_t start, end; 116 double time = 0; 117 scanf("%d\n", &n); 118 creat_bb(n); 119 start = clock(); 120 sortBubble(); 121 end = clock(); 122 time =(double) end - start; 123 printf("%d,%d,%lf", count_bubble, swap_bubble, time); 124} 125 126} 127
試したこと
gcc -g ファイル名.c -lm で実行してみましたが特に新たなファイルは出ず、nの値を入力すると止まってしまいました。
補足情報(FW/ツールのバージョンなど)
gitpod を使用しています。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。