みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Visual C++でのプログラミング

学校でプログラミングの課題が出たので自分のパソコンに
Microsoft Visual C++ 2010 Express
をインストールして作ってみました。


それが以下のプログラムです。
これは任意の値nを入力してa[n]までの配列をつくり
それを降順に並び替えるものです。



#include <stdio.h>
#define N 10000

int main(){
int a[N],i,j,max,min,n,temp;

n=0;

printf("n=");
scanf("%d",n);
if(N<n){
return 0;
}
else if(n<=0){
return 0;
}
else if(n<=N){
for(i=0;i<=n;i++){
printf("a[%d]",i);
scanf("%d\n",&a[i]);
}
max=min=a[0];

for(i=1;i<n;i++){
if(max<a[i]){
max=a[i];
}
else if(min>a[i]){
min=a[i];
}
}
printf("a[i]のソート結果\n");
for(i=0;i<n;i++);{
for(j=i+1;j<n;j++){
if(a[i]<a[j]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}

for(i=0;i<n;i++){
printf("a[i]=%d\n",a[i]);
}

printf("Max=%d\n",max);
printf("Min=%d\n",min);
}
}


これをVisual C++でデバックすると
『test.exeの0x0fcbe42e(msvcr100d.dll)にハンドルされていない例外が発生しました:0C0000005:
場所 0x00000000 に書き込み中のアクセス違反が発生しました。』

と表示されて実行できません。




今日インストールしたばかりなのでどこでエラーが起きているのかわかりません。
これはプログラミングとVisual C++のどっちが原因なのでしょうか?

もしお分かりになるならば、具体的な解決方法や
プログラムの訂正点などを教えていただきたいです。

投稿日時 - 2012-12-19 19:49:31

QNo.7852608

すぐに回答ほしいです

質問者が選んだベストアンサー

n = 0のアドレスに書き込みしようとしています。
scanfにはnの値ではなくポインタを渡しましょう。

scanf("%d",n); -> scanf("%d",&n);

投稿日時 - 2012-12-19 20:29:59

お礼

それが間違えでした!
ありがとうございました。



後なんですが
コンパイルした後に実行してa[0]の値を入力してエンター押しても
a[1]に行きません。
なにか値を入れてエンター押すとa[1]が現れますが、値がずれてしまいます。

指摘された
scanf("%d",n); -> scanf("%d",&n);

ソート後に全部a[i]で表示されたので
for(i=0;i<n;i++){
printf("a[%2d]=%d\n",i,a[i]);

しか直していませんが
出力の例を書くと

n=5
a[0]1

4
a[1]3
a[2]9
a[3]12
a[4]14
a[5]11


a[i]のソート結果
a[0]1
a[1]4
a[2]3
a[3]9
a[4]12


と値と数字がずれてしまい
更にはソートもうまくいっていません。


この原因もわかりますかね?

投稿日時 - 2012-12-19 22:12:18

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

> 『test.exeの0x0fcbe42e(msvcr100d.dll)にハンドルされていない例外が発生しました:0C0000005:
> 場所 0x00000000 に書き込み中のアクセス違反が発生しました。』
>
> と表示されて実行できません。

これは
1) デバッグを開始した途端に出るんですか?
2) それとも実行中に、ですか?

1... もっと単純な、たとえば"Hello,world"でもそうなりますか?
2... それが起こるのは同じ個所で? そうならばそれはどこ?

投稿日時 - 2012-12-19 20:29:47

お礼

回答ありがとうございます。

No.2のかたの指摘された箇所が原因でした。


しかしまだうまく出力されないので
よろしければ協力をお願いします。


以下コピペ

指摘された
scanf("%d",n); -> scanf("%d",&n);

ソート後に全部a[i]で表示されたので
for(i=0;i<n;i++){
printf("a[%2d]=%d\n",i,a[i]);

しか直していませんが
出力の例を書くと

n=5
a[0]1

4
a[1]3
a[2]9
a[3]12
a[4]14
a[5]11


a[i]のソート結果
a[0]1
a[1]4
a[2]3
a[3]9
a[4]12


と値と数字がずれてしまい
更にはソートもうまくいっていません。


この原因もわかりますかね?

投稿日時 - 2012-12-19 22:15:56

あなたにオススメの質問