どうも、二回目です・・・住所録を作成しているのですが・・・

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
matunon
記事: 64
登録日時: 11年前

どうも、二回目です・・・住所録を作成しているのですが・・・

#1

投稿記事 by matunon » 11年前

現行の状態でもバイナリファイルだったらいけるべとおもいコンパイル。
するとエラーが出なかったので喜び勇んで実行したのですが・・・・・・
結果は空欄の結果がずっと表示される中にぽつんと
No-8564211012
氏名:フフフフフフフフがgきあ
年齢:フフフフフフ


といったようなものが一つあるだけになってしまいます。
環境はvisual studio2013 C++
言語はC言語です。

以下ソースです。
► スポイラーを表示
以前よりはレベルアップしたつもりだったのですが・・・・・・まだまだだったようです。
アドバイスをいただきたいです。
おねがいします!

matunon
記事: 64
登録日時: 11年前

Re: どうも、二回目です・・・住所録を作成しているのですが・・・

#2

投稿記事 by matunon » 11年前

あれ?これってもしかしてchar型の配列に1000はおおすぎまっせって感じですか?
はずかしい・・・・・。
どうなんでしょう?

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: どうも、二回目です・・・住所録を作成しているのですが・・・

#3

投稿記事 by みけCAT » 11年前

matunon さんが書きました:あれ?これってもしかしてchar型の配列に1000はおおすぎまっせって感じですか?
はずかしい・・・・・。
どうなんでしょう?
この構造体(disp_t)の1000要素の配列を確保するのは多すぎるとは思いませんが、
実際に1000要素の配列を確保している場所が見当たりません。
確保された領域の範囲外にアクセスし、メモリ(上のデータ)を破壊している可能性が考えられます。

【追記】このようなバグを防ぐため、確保する配列の要素数(=読み書きする要素数)を#defineを利用した定数で指定した方がいいと思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

matunon
記事: 64
登録日時: 11年前

Re: どうも、二回目です・・・住所録を作成しているのですが・・・

#4

投稿記事 by matunon » 11年前

あ、みけCATさん!今回もありがとうございます!

#define・・・いわゆるマクロってやつですね。
数値設定だけなら難しくないと思うんでやってみます!

質問なのですが、今回の課題では保存できるアドレスのかずには制限は設けないとのことだったのですが、
やはり、配列の可変冗長をつかうのかなあと思ったのですが、構造体配列でも可変冗長は使えるのでしょうか?
malloc関数を使えるのでしょうか?
使うとしたらどのように使うのでしょうか。

アドバイスをばお願いします!

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: どうも、二回目です・・・住所録を作成しているのですが・・・

#5

投稿記事 by みけCAT » 11年前

「可変冗長」が何のことかわかりませんが、malloc関数は使えます。
可変個のデータを保存するときは、データの件数を最初に保存した方がいいと思います。
不定個のデータを入力する時はデータをリスト構造で管理すると、reallocを使用する必要が無くなっていいと思います。
ファイルから読み込む時は、最初に保存したデータの件数を元に配列を確保し、そこにデータを読み込んでいくといいと思います。
リスト構造の1個のノードは、例えばこんな感じで配列を乗せられるようにするといいかもしれません。

コード:

struct disp_t_list {
    int dataNum;
   disp_t* data;
    struct disp_t_list* next;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

matunon
記事: 64
登録日時: 11年前

Re: どうも、二回目です・・・住所録を作成しているのですが・・・

#6

投稿記事 by matunon » 11年前

みけCAT さんが書きました:「可変冗長」が何のことかわかりませんが、malloc関数は使えます。
可変個のデータを保存するときは、データの件数を最初に保存した方がいいと思います。
不定個のデータを入力する時はデータをリスト構造で管理すると、reallocを使用する必要が無くなっていいと思います。
ファイルから読み込む時は、最初に保存したデータの件数を元に配列を確保し、そこにデータを読み込んでいくといいと思います。
リスト構造の1個のノードは、例えばこんな感じで配列を乗せられるようにするといいかもしれません。

コード:

struct disp_t_list {
    int dataNum;
   disp_t* data;
    struct disp_t_list* next;
}
リスト構造ですね・・・・・・。
勉強してきます。
明日には進展を報告できるかと・・・・・・。
まだ未解決にしておきます。

閉鎖

“C言語何でも質問掲示板” へ戻る