//Run-Time Check Failure #3 - The variable 'Data' is being used without being defined.
//というエラーが出ます。どうしたらいいですか?
//プログラムの内容は、数値を格納するときに、二分木構造で格納していくというものです。
//多分違うような気がしますが、、
//よろしくお願いします。
#include<stdio.h>
struct DATA
{
DATA *Small;
DATA *Large;
int Number;
};
void InputData(DATA *Dat,int num)
{
if(Dat==NULL){Dat=new DATA;Dat->Number=num;return;}
if(Dat->Number<num)
{
Dat->Large=new DATA;
Dat=Dat->Large;
InputData(Dat,num);
}
else if(Dat->Number>num)
{
Dat->Small=new DATA;
Dat=Dat->Small;
InputData(Dat,num);
}
return;
}
int main()
{
DATA *Data;
InputData(Data,20);//<-ここでエラーが出ます。
InputData(Data,10);
InputData(Data,30);
return 0;
}
No.3ベストアンサー
- 回答日時:
とりあえず、題名のエラーに付いてですが、
それは、mainの中での初期値を設定していない為に、
変数に不定値が入っていた為に起こった現象です。
で、#2に付いての質問ですが、まずは、main関数での宣言の
DATA *Data ;
は、アドレスを格納する変数と言うことです。
また、InputData関数の引数の
DATA **Datに付いては
アドレスを格納する変数のアドレスを引数とするという事です。
ですから、質問時のInputDataの引数の
DATA *Datでは
Datと言う変数のアドレスを受け取ると言うことで
アドレスを格納する変数では無く、実体(値)を格納する変数となります。
で、#2のようにDATA **Datとすると *Datのアドレスを
受け取ると言うことになり、アドレスを格納する
変数と言うことに成ります。
(引数で記述するのはあくまでも変数宣言と同等です。)
以上が今回のエラー及びプログラムの間違いです。
(説明が下手で申し訳ありませんm(_ _)m)
詳しいアドレス及びポインタに付いては、C言語の
書籍にポインタに付いて記述されていると思いますので
探してみてください。
でも、ポインタに付いて詳しい説明をしている書籍って
・・・本1冊分になるような気がする(汗
それと、余計なアドバイスに成りますが、
ローカル変数とグローバル変数の違いもお勉強されると
良いかもしれませんね。
ローカル変数は、宣言するだけでは初期値は不定とかね。(だから、必ず初期化が必要なんです。)
そうすれば、今回のエラーの意味もすぐにわかると思います。
これも、余計な事かもしれませんが、#2の
お礼の部分に記述してあるプログラムに付いてですが、
せっかくですから、InputDataの中でデータと
データの間に挿入すると処理を追加すれば、
DATA *Top;
DATA *TopTmp;
をmainで使用しなくても動作すると思います。
では、頑張って見て下さい。
たびたびありがとうございます。
意味もなんとなく解ってきました。
ちょっときれいなソースコードになりました。
ありがとうございました。
#include<stdio.h>
struct DATA
{
DATA *Small;
DATA *Large;
int Number;
};
DATA *InputData(DATA **Dat,int num)
{
if((*Dat)==NULL)
{
(*Dat)=new DATA;
(*Dat)->Number=num;
(*Dat)->Large=NULL;
(*Dat)->Small=NULL;
return (*Dat);
}
if((*Dat)->Number<num)
{
InputData(&(*Dat)->Large,num);
}
else if((*Dat)->Number>num)
{
InputData(&(*Dat)->Small,num);
}
return (*Dat);
}
void ShowData(DATA *Dat)
{
if(Dat==NULL){return;}
ShowData(Dat->Small);
printf("%d ",Dat->Number);
ShowData(Dat->Large);
}
int main()
{
DATA *Data;
Data=NULL;
Data=InputData(&Data,10);
InputData(&Data,5);
InputData(&Data,15);
InputData(&Data,-20);
InputData(&Data,3);
InputData(&Data,8);
InputData(&Data,-50);
ShowData(Data);
getchar();
return 0;
}
No.2
- 回答日時:
#1です。
多分#1を直しても意図した動作には成らないと思います。
多分、意図した動作にするには下記の様にしないと・・
領域確保の部分でおかしくなると思います。
後は、ソースを追って何が違うか考えてみてください。
ヒントは、ポインタの使い方です。
#include<stdio.h>
#include<string.h>
struct DATA
{
DATA *Small;
DATA *Large;
int Number;
};
void InputData(DATA **Dat,int num)
{
if(*Dat==NULL){
*Dat=new DATA;
memset( *Dat, '\0', sizeof( DATA )) ;
(*Dat)->Number=num;
return;
}
if((*Dat)->Number<num)
{
InputData(&((*Dat)->Large),num);
}
else if((*Dat)->Number>num)
{
InputData(&((*Dat)->Small),num);
}
return;
}
int main()
{
DATA *Data = NULL ;
InputData(&Data,20);
InputData(&Data,10);
InputData(&Data,30);
return 0;
}
回答ありがとうございました。
遅くなりましてすみません。
一応できたのですが、意味は解っていません。
ポインタのポインタのところです。
#include<stdio.h>
#include<string.h>
struct DATA
{
DATA *Small;
DATA *Large;
int Number;
};
void InputData(DATA **Dat,int num)
{
if(*Dat==NULL)
{
*Dat=new DATA;
memset( *Dat, '\0', sizeof( DATA )) ;
(*Dat)->Number=num;
return;
}
if((*Dat)->Number<num)
{
InputData(&((*Dat)->Large),num);
}
else if((*Dat)->Number>num)
{
InputData(&((*Dat)->Small),num);
}
return;
}
void ShowData(DATA **Dat)
{
DATA **Tmp;
Tmp = Dat;
while (*Tmp)
{
ShowData(&(*Tmp)->Small);
printf("%d ",(*Tmp)->Number);
(*Tmp)=(*Tmp)->Large;
}
}
int main()
{
DATA *Data = NULL ;
InputData(&Data,20);
DATA *Top;
DATA *TopTmp;
TopTmp=Top=Data;
InputData(&Top,10);
Top=TopTmp;
InputData(&Top,30);
Top=TopTmp;
InputData(&Top,5);
Top=TopTmp;
InputData(&Top,8);
Top=TopTmp;
InputData(&Top,50);
Top=TopTmp;
InputData(&Top,1000);
Top=TopTmp;
InputData(&Top,-100);
Top=TopTmp;
ShowData(&Top);
getchar();
return 0;
}
No.1
- 回答日時:
ローカル変数の初期値は不定の為以下のように
初期化しないと
InputData関数の if(Dat==NULL)は条件が一致せず、
Data領域をnewしないと思われますけど・・・
int main()
{
DATA *Data = NULL ;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pandasでまとめてインデックスを削除するにはどうすればいいですか? たとえば、以下のプログラムで 1 2022/07/31 23:09
- MySQL MYSQL エラー 2 2022/10/18 11:37
- その他(プログラミング・Web制作) Fortranでの出力ファイル 2 2023/03/21 21:25
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- UNIX・Linux Linuxについて質問です。 以下のような設定をしたMakefileを作成するにはどう記述すればよい 1 2023/02/03 20:10
- その他(プログラミング・Web制作) Python - Excel で Webからデータを連続取得したいのですが エラーが出ます 1 2023/07/06 20:08
このQ&Aを見た人はこんなQ&Aも見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
「平成」を感じるもの
「昭和レトロ」に続いて「平成レトロ」なる言葉が流行しています。 皆さんはどのようなモノ・コトに「平成」を感じますか?
-
「覚え間違い」を教えてください!
私はかなり長いこと「大団円」ということばを、たくさんの団員が祝ってくれるイメージで「大円団」だと間違えて覚えていました。
-
牛、豚、鶏、どれか一つ食べられなくなるとしたら?
牛肉、豚肉、鶏肉のうち、どれか一種類をこの先一生食べられなくなるとしたらどれを我慢しますか?
-
タイムマシーンがあったら、過去と未来どちらに行く?
20XX年、ついにタイムマシーンが開発されました。 あなたは過去に行く? それとも未来? タイムマシーンにのって、どこに行って、何をしたいか教えてください!
-
C++デバックエラーについて詳しく教えてください。
C言語・C++・C#
-
バッファとは何ですか
C言語・C++・C#
-
エラーの原因は?「この関数の定義が見つかりません」
C言語・C++・C#
-
-
4
構文エラー;"が型の前にありませんとは、どうしたら解決できるのですか。"
C言語・C++・C#
-
5
Debug Assertion Failed?
C言語・C++・C#
-
6
visual studio でインデントを自動的に揃えるショートカットキー
その他(プログラミング・Web制作)
-
7
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
8
EDITコントロールで入力できる文字を制限するには?
C言語・C++・C#
-
9
エディットボックスの入力制限について
C言語・C++・C#
-
10
画面を強制的に再描画させる方法
C言語・C++・C#
-
11
C2146を回避するにはどうしたら良いのでしょうか
C言語・C++・C#
-
12
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
13
「fatal error C1189」を回避するには?
C言語・C++・C#
-
14
long型の定数の末尾にLを付ける意味
C言語・C++・C#
-
15
LINK : fatal error LNK1104について
C言語・C++・C#
-
16
【C++/CLI】コンボボックスの値を取得したい
C言語・C++・C#
-
17
【C++/CLI.NET】コンボボックスの値の設定・取得
C言語・C++・C#
-
18
デバッグ中のエラーのことで教えてください。
C言語・C++・C#
-
19
読み込み中にアクセス違反が発生しました、と出ます。これを回避することは
C言語・C++・C#
-
20
例えばはe.g.?それともex.?
英語
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セグメントエラー
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
戻り値で構造体を返すことは可...
-
C言語のポインタに直接アドレス...
-
参照型で受け取った引数をポイ...
-
構造体の削除について
-
デバイスハンドルとは?
-
ExcelVBAでのkernel32(64bit)
-
c言語のエラーについて
-
LPSTR型の初期化について
-
コンストラクタやデストラクタ...
-
C言語 ポインタと配列の違い...
-
fopne で失敗する原因
-
スコープ外でのアドレスの参照...
-
TCHAR文字列内の検索について
-
NULLポインタは0と書かなければ...
-
C++ vectorのbeginについて
-
C言語でのconstを返す関数
-
関数ポインタの高速化のメリット
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
fopne で失敗する原因
-
戻り値で構造体を返すことは可...
-
LPSTR型の初期化について
-
ExcelVBAでのkernel32(64bit)
-
参照型で受け取った引数をポイ...
-
ハンドル、アドレス、ポインタ...
-
ハンドルはポインタか
-
C言語でのconstを返す関数
-
デバイスハンドルとは?
-
Cで作成したDLL関数をVBから呼...
-
popenした子プロセスのプロセス...
-
c言語で任意のファイルから読み...
-
[excel vba] マウスポインタの...
-
パスからファイル名を抽出
-
プーさんのマウスポインタを教...
-
基本アルゴリズムの『返す』の...
おすすめ情報