質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

1回答

1138閲覧

トップダウンマージソートのコードエラー

kun_monimoni

総合スコア26

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

1クリップ

投稿2020/07/23 02:23

トップダウンマージソートのソースコードを書いたのですが、エラーが出てしまいます。そのエラーはは、実行した時に、int i = atoi(argv[1]); の所にThread1: EXC_BAD_ACCESS (code=1,address=0×0)出てきてしまうというものです。どなたかわかる方がいらっしゃれば教えていただきたいです。

#include <stdio.h>
#include <stdlib.h>
typedef int Item;
#define key(A) (A)
#define less(A, B) (key(A) < key(B))
#define exch(A, B) { Item t = A; A = B; B = t; }
#define compexch(A, B) if (less(B, A)) exch(A, B)
#define maxN 100000
#define M 10
void merge(Item a[], int l, int m, int r);

Item aux[maxN];
void merge(Item a[], int l, int m, int r){
int i, j, k;
for (i = m+1; i > l; i--) aux[i-1] = a[i-1];
for (j = m; j < r; j++) aux[r+m-j] = a[j+1];
for (k = l; k <= r; k++)
if (less(aux[i], aux[j]))
a[k] = aux[i++]; else a[k] = aux[j--];
}

void insertion(Item a[], int l, int r) {
int i;
for (i = r; i > l; i--) compexch(a[i-1], a[i]);
for (i = l+2; i <= r; i++) {
int j = i; Item v = a[i];
while (less(v, a[j-1])) {
a[j] = a[j-1]; j--; } a[j] = v;
}
}

int partition(Item a[], int l, int r) {
int i = l-1, j = r; Item v = a[r];
for (;;) {
while (less(a[++i], v)) ;
while (less(v, a[--j])) if (j == l) break;
if (i >= j) break;
exch(a[i], a[j]); }
exch(a[i], a[r]);
return i;
}

void quicksort(Item a[], int l, int r) {
int i;
if (r-l <= M) return;
exch(a[(l+r)/2], a[r-1]);
compexch(a[l], a[r-1]); compexch(a[l], a[r]); compexch(a[r-1], a[r]);
i = partition(a, l+1, r-1); quicksort(a, l, i-1); quicksort(a, i+1, r);
}

void sort(Item a[], int l, int r) {
int m = (r+l)/2;
if (r <= l) return;
sort(a, l, m);
sort(a, m+1, r);
merge(a, l, m, r);
}

int main(int argc, char argv[]) {
int i = atoi(argv[1]);
int N = atoi(argv[1]);
int sw = atoi(argv[2]);
int a = malloc(Nsizeof(int));
srand(1);
if (sw)
for (i = 0; i < N; i++)
a[i] = 1000
(1.0*rand()/RAND_MAX);
else
for (N = 0; scanf("%d", &a[N]) == 1; N++);
sort(a, 0, N-1);
for (i = 0; i < N; i++) printf("%3d ", a[i]);
printf("¥n");
}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2020/07/23 07:26

このままではコードが読めないので、質問を編集し、<code>ボタンを押し、出てくる’’’の枠の中にコードを貼り付けてください
guest

回答1

0

ベストアンサー

実行した時に、int i = atoi(argv[1]); の所にThread1: EXC_BAD_ACCESS (code=1,address=0×0)出てきてしまうというものです。

argv[1]が存在するような方法で実行していますでしょうか?

./a.out 50のように、コマンド引数を付けて実行した場合の1つ目がargv[1]に入ります。

投稿2020/07/23 02:30

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kun_monimoni

2020/07/23 10:54

ありがとうございます!できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問