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

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

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

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

Q&A

解決済

4回答

1929閲覧

デバックエラーが消せません・・・

KSehino

総合スコア17

C

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

0グッド

0クリップ

投稿2016/06/12 04:03

###プログラミング初心者です。
C言語で自作関数を用いて5桁の数字を入力して逆数を表示するプログラムを作っています。
(戻り値有りの自作関数を作成中です)
プログラムを作ってデバックをし、数字を入力したあとデバックエラーが出てしまいます。

###発生している問題・エラーメッセージ

エラーメッセージ
Debug Error!と出てきてしまいます

###該当のソースコード
#include<stdio.h>
int inverse(int a) {
int x;
int p, q[4];

for (p = 0; p<5; p++) { q[p] = a % 10; a /= 10; } x = 10000 * q[0] + 1000 * q[1] + 100 * q[2] + 10 * q[3] + q[4]; return x;

}

int main(void) {
int num;
printf("正の整数を入力:");
scanf("%d", &num);
printf("%dを逆から読むと%d", num, inverse(num));

return 0;

}

###試したこと
自作関数部にprintfをしてみたりmain関数の%d部分を変えてみたりしました

###補足情報(言語/FW/ツール等のバージョンなど)
C言語
戻り値なしの場合はうまくできたのですが、戻り値なし、仮引数を受け取らない場合エラーが出てきてしまいます
上のプログラム自体綺麗ではないとは思いますがどうかこの方法でどこが間違っているのか返答お願いします

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

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

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

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

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

guest

回答4

0

直接的な回答は既に出ていますので、少し違った観点で。

この程度の簡単なバッファオーバーフローなどの実装ミスは、OSSの静的解析ツール CppCheck で検出可能です。

以下、掲載ソースをCppCheckでチェックした結果です。

[src.cpp:7]: (error) Array 'q[4]' accessed at index 4, which is out of bounds.
[src.cpp:10]: (error) Array 'q[4]' accessed at index 4, which is out of bounds.

投稿2016/06/12 09:26

KenjiToriumi

総合スコア344

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

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

0

ベストアンサー

int p, q[4];

qの配列を、q[4]と宣言していますので
q[0]~q[3]までとなります。

for (p = 0; p<5; p++) { q[p] = a % 10; // <= p=4 の場合 q[4] a /= 10; }

で宣言以上のエリアへ値を代入しているため、
「Debug Error!」が出ていると思われます。

投稿2016/06/12 06:24

ai_2013_dev

総合スコア338

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

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

KSehino

2016/06/12 06:38

q[4]ではq[0]~q[3]までしかできないのですね! 勉強になりました。詳しく教えていただきありがとうございました!
guest

0

とりあえずC言語としての間違いは既出です。が、それを「逆数」というのは違うと思います。

投稿2016/06/12 05:19

HogeAnimalLover

総合スコア4830

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

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

0

int p, q[4];

5桁の数値を一桁ずつ配列に入れたいのですよね。q[4]で定義すると、q[0]q[3]の4個しか確保されません。

投稿2016/06/12 04:33

編集2016/06/12 04:34
catsforepaw

総合スコア5938

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問