2016-05-01 10 views
-5

私は2つの異なる関数を作成していますが、どちらもポインタを使用する必要があります。さまざまな機能のメモリ割り当てですか?

私はポインタの値を入力する関数でmallocを使う必要があります。次に、別の関数で割り当てられたポインタの値をソートすることができます(その部分はうまくいくが、常にプログラムがクラッシュする) 。

メイン関数でmallocを使用すると、私は両方のユーザ作成関数でポインタを簡単に使うことができますが、私が述べたように、私が作った関数でmallocを使ってみようとしています他の機能で動作します。

私の質問は、これは可能ですか?また、私はグローバル規模でmallocを望んでいません(それが可能であれば)。

+3

コードを投稿してください。 – fluter

+2

メモリを割り当てる関数からポインタを返します。 –

+0

コードを投稿すると、さらに混乱するだけです。これは少し大きなプログラムで、複数のファイルを使用します。一般に、私の2つの関数は、enterdata(ポインタ)とsort_data(ポインタ)です。私は "enterdata"でmallocを使用する必要がありますが、その後にプログラムがクラッシュしないことを確認します。私はsort_dataを使用します。 – Axel1212

答えて

0

コードがなければ、私はあまり手伝ってはいけませんが、mallocの関数では、その関数がポインタを返すようにしてください。あなたは、その関数がポインタへのポインタを取り、それをそのように割り当てることもできます。

ウェイ1

void* f1() 
{ 
    return malloc(szData); 
} 

void f2(void* ptr) 
{ 
    // do stuff with pointer 
} 

int main() 
{ 
    void* ptr = NULL; 
    ptr = f1(); 
    f2(ptr); 
    free(ptr); 
} 

ウェイ2

void f1(void** ptr) 
{ 
    *ptr = malloc(szData); 
} 

void f2(void* ptr) 
{ 
    // do stuff with pointer 
} 

int main() 
{ 
    void* ptr = NULL; 
    f1(&ptr); 
    f2(ptr); 
    free(ptr); 
} 

これを行うためのさまざまな方法があります。私はこれらの2つの例があなたの問題を解決するのに十分であることを願っています。

+0

ありがとう! 2番目の方法は魅力的に機能しました。 – Axel1212

+0

そのメモリを解放する必要があります。 – Michi

+0

@GregM:あなたが予約したランタイムリリースリソースを悪用することは、悪いコーディングスタイルです。メモリを割り当てた場合は、そのメモリを解放する必要があります。 (ファイルの場合も同様です)結果がチェックされず、ポインタ引数を使用して値を返すことができますが、関数が 'void'でも悪い形式です。ポインタを返すのはずっと前進しています。最後に、 'main'には落胆署名があります。プロトタイプ宣言子を使用します。 – Olaf

関連する問題