C言語プログラミング:別の関数内のmalloc()
2023-08-14 23:42:48
質問
私は
malloc()
別の関数内
.
を渡しています。
ポインタ
と
サイズ
を私の
main()
を使って、そのポインタのために動的にメモリを確保したいと思います。
malloc()
を使って動的にメモリを割り当てたいのですが、私が見たところ...割り当てられたメモリは呼び出された関数内で宣言されたポインタ用で
main()
.
関数にポインタを渡し、渡されたポインタのためにメモリを確保するにはどうしたらよいでしょうか 呼ばれた関数の内部から ?
以下のようなコードを書きましたが、以下のような出力が得られました。
SOURCE:
int main()
{
unsigned char *input_image;
unsigned int bmp_image_size = 262144;
if(alloc_pixels(input_image, bmp_image_size)==NULL)
printf("\nPoint2: Memory allocated: %d bytes",_msize(input_image));
else
printf("\nPoint3: Memory not allocated");
return 0;
}
signed char alloc_pixels(unsigned char *ptr, unsigned int size)
{
signed char status = NO_ERROR;
ptr = NULL;
ptr = (unsigned char*)malloc(size);
if(ptr== NULL)
{
status = ERROR;
free(ptr);
printf("\nERROR: Memory allocation did not complete successfully!");
}
printf("\nPoint1: Memory allocated: %d bytes",_msize(ptr));
return status;
}
プログラムの出力です。
Point1: Memory allocated ptr: 262144 bytes
Point2: Memory allocated input_image: 0 bytes
どのように解決するのですか?
関数のパラメータとしてポインタを渡す必要があります。
int main()
{
unsigned char *input_image;
unsigned int bmp_image_size = 262144;
if(alloc_pixels(&input_image, bmp_image_size) == NO_ERROR)
printf("\nPoint2: Memory allocated: %d bytes",_msize(input_image));
else
printf("\nPoint3: Memory not allocated");
return 0;
}
signed char alloc_pixels(unsigned char **ptr, unsigned int size)
{
signed char status = NO_ERROR;
*ptr = NULL;
*ptr = (unsigned char*)malloc(size);
if(*ptr== NULL)
{
status = ERROR;
free(*ptr); /* this line is completely redundant */
printf("\nERROR: Memory allocation did not complete successfully!");
}
printf("\nPoint1: Memory allocated: %d bytes",_msize(*ptr));
return status;
}
関連
-
赤線の位置は必ずしも間違っていない:式は変更可能なlvalueでなければならないエラーは、この文とは別の場所に存在する可能性があります。
-
[解決済み] Windows用Cコンパイラ?[クローズド]
-
[解決済み] C言語の**はどういう意味ですか?
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] メソッドと関数の違いは何ですか?
-
[解決済み] mallocとcallocの違い?
-
[解決済み] プログラム終了前にmallocの後にfreeをしないと本当に何が起こるのか?
-
[解決済み】JavaScriptの関数にデフォルトのパラメータ値を設定する
-
[解決済み】C言語の関数ポインタはどのように機能するのですか?
-
[解決済み】関数の前のエクスクラメーションマークは何をするのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Cエラー [エラー] 代入_Ashesの左オペランドにlvalueが必要です-プログラマーズ・シークレット
-
未定義の `__isoc99_sscanf' への参照
-
エラー: 宣言されていない識別子 'bool' の使用と C コンパイラでの問題点
-
[解決済み] munmap_chunk(): 無効なポインタ
-
[解決済み] C言語で%sを正しく使う - 超基本レベル
-
[解決済み] C言語の**はどういう意味ですか?
-
[解決済み] ソケットアクセプト - "開かれているファイルが多すぎる"
-
[解決済み] printfにおけるdoubleの正しい書式指定子
-
[解決済み] なぜsizeof(x++)はxをインクリメントしないのですか?
-
[解決済み] フリーは、どのように無料化を知っているのですか?