2017-01-06 12 views
-1

PIC32をベンチマークするためにDhrystoneを実行しようとしています。CでのDhrystoneの実行、malloc()の競合するタイプ

私はそれが古い使用していますが、特に建物からそれを阻止される問題の1つであり、ソースコード:エラー:矛盾するタイプ)* malloc関数のための

extern char  *malloc(); 
.... 
.... 



Next_Ptr_Glob = (Rec_Pointer) 

    malloc (sizeof (Rec_Type)); 
    Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type)); 


    Ptr_Glob->Ptr_Comp     = Next_Ptr_Glob; 

    Ptr_Glob->Discr      = Ident_1; 
    Ptr_Glob->variant.var_1.Enum_Comp  = Ident_3; 
    Ptr_Glob->variant.var_1.Int_Comp  = 40; 
    strcpy (Ptr_Glob->variant.var_1.Str_Comp, 
      "DHRYSTONE PROGRAM, SOME STRING"); 
    strcpy (Str_1_Loc, "DHRYSTONE PROGRAM, 1'ST STRING"); 

//rest of program 

宣言は(コンパイラのメッセージを生成し、 'malloc'のために。私がその行をコメントアウトすると、プログラムを実行できますが、Ptr_Glob-> Ptr_Comp = Next_Ptr_Globにランタイムエラーがあると思います。 ...私はランタイムエラーをデバッグするためにLEDを使用しています、そして、彼らはその時点まで動作します。なぜ私がこれらの問題を抱えているのか、どんな考えですか?どうすればmalloc()で問題を解決できますか?

+0

再malloc関数を追加することですです。しかし、コード(http://homepages.cwi.nl/~steven/dry.c?)は古く、あらゆる種類の愚かなトリックをプレイしているので、2つの質問があります。 (それはすべきです)、そして、第二に、あなたは "sh dry.c"を介してそれを実行しています、あなたはarentですか? – loreb

+0

PIC32はそのようなコードを正当化するほど古くはありません!このようなMCUで 'malloc 'を使用することは、PIC32が起動したときに既に適切なプロトタイプを必要とする、何年か前に欠陥のあるデザイン、C99の方法の信号であることは言うまでもない。プログラマーが悪い仕事をしたように見えます。 – Olaf

答えて

0

mallocが間違っているようです。 「の#include 」と、その行を置き換える - 適切な宣言は extern void * malloc(size_t);

アンでもよりよい解決策は、#include <stdlib.h>;

+0

アプリケーションコードでライブラリ関数を宣言してはいけません。 – Olaf

+0

明確に定義されたAPIを宣言することに問題はありません。しかし、適切なヘッダーファイル – levengli

+0

を含めるように提案したのは悪い習慣です。#include ;私のコードにはすでにあります。それがコメントアウトした後に機能する理由です。それにもかかわらず、このソースコードは非常に古く、問題を抱えているようです。残念ながら私はdhrystoneのソースコードをどこに実装するのが簡単か分かりません...すべてのメーカーが常にdmipsについて語っているので、これは奇妙です。どこかのコードに簡単にアクセスできるように思えます。 – Ozzyozbone

関連する問題