• 締切済み

自己参照型構造体2

いつも世話になります。 以前、自己参照型構造体について質問しました。 そのときは、Free関数についてでしたが、 今度は、関数についてです。 プログラム自体は、単純なのですが、 1)メイン関数内に、while(1){switch(){case...}} 2)[case 1]入力[case 2]表示[case 3]ファイル保存[case 4]ファイル読込[case 5]終了 関数化せずに、メイン関数内に記述をしましたら、 動作に問題はなかったです。 これを、関数化するとエラー(異常な動作)になります。 void inputdata(data *dat,int *cnt); void outputdata(data *start,int cnt); のようにしていますが、うまく関数化できる方法はありますでしょうか? よろしくお願いします。

みんなの回答

  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.1

 関数の宣言、そのものは正常と思います。  正確には、ソースとどういう異常な動作をするかがわからないと、おかしな原因がわかりませんが・・・  書いてある内容から、直感的には、inputdataの第一引数のdatに関するメモリーの確保関係に、何かがひそんでいそうな気がします。  チェックポイントとしては、関数内で正しくメモリーを確保しているか?  関数内で確保されたメモリーアドレスが正しく、datに引き渡されているか?  余計なfree をしていないか?(処理内容によりますが、freeのタイミングは、「終了」か「ファイル保存」のどちらかなように感じます。「ファイル読み込み」では、特殊な初期化が必要かどうか・・・  もしこれで解ければ良いですが、解けないのなら、ソースと、異常な動作の、詳しい内容がないとどうにもならないかと。