main()内でいくつかの配列を動的確保するとごちゃごちゃするので、
関数化してみました。しかし、下のプログラムではうまい事いきませ
んでした。
#include<stdio.h>
#include<stdlib.h>
void array1d(int *box,int n)
{
int i;
box=(int *)malloc(n * sizeof(int));
for(i=0; i<n; i++) { box[i]=0; }
}
main()
{
int *pol,i,n;
printf("N pol\nN = ");
scanf("%d",&n);
array1d(pol,n);
for(i=0; i<n; i++) { printf("[%d]=%d\n",i,pol[i]); }
}
実行結果は
[0]=-14646387
[1]=-1819410433
[2]=-224
array1d内では0を格納していますが、このようになりました。
どのようにすれば 0になるでしょうか?
回答よろしくお願いします。
No.3ベストアンサー
- 回答日時:
もっと素直に考えた方がいいですよ。
動的にとるなら、関数内で確保すればいいのでは?
但しメモリの確保開放は入り口と出口が明示的にわかった方がいいので、あまり関数を分けて確保したり、開放したりするのは私的にお勧めできません。
ちょっと質問者のソースをいじってみました。
これでよいのではないですか?
#include<stdio.h>
#include<stdlib.h>
//動的に確保するなら別に引数に渡さず確保した先頭アドレスだけ返せば良い!
int *array1d(int n)
{
int i;
int *box;
box=(int *)malloc(n * sizeof(int));
for(i=0; i<n; i++)
{
box[i]=0;
}
return box;
}
main()
{
int *pol,i,n;
printf("N pol\nN = ");
scanf("%d",&n);
pol = array1d(n);
for(i=0; i<n; i++)
{
printf("[%d]=%d\n",i,pol[i] );
}
//必ず開放して下さい。
free(pol);
}
No.2
- 回答日時:
void array1d(int *box,int n)
を
void array1d(int **box,int n)
として、
box=(int *)malloc(n * sizeof(int));
for(i=0; i<n; i++) { box[i]=0; }
を
*box=(int *)malloc(n * sizeof(int));
for(i=0; i<n; i++) { (*box)[i]=0; }
理由はポインタのことをよーく考えてください。
ポインタのポインタはわかりづらいかもしれませんが、がんばって理解しましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# c言語配列の結合についてです。 なぜうまくいかないのでしょうか。 #include <stdio.h 4 2022/05/30 22:42
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。 3 2023/01/29 19:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
卒業研究でよく分からないとこ...
-
ラップ関数とはどんなものですか?
-
(int *)の意味
-
if と配列の組み合わせ
-
足して100になるような乱数のア...
-
このプログラミング誰か教えて...
-
system関数がうまくいかない
-
【C++】関数ポインタの使い方
-
int16_t の _t は何?
-
C#の質問
-
エラー 添字が付けられた値が、...
-
構造体の勉強中です 合計点の高...
-
C言語 配列と関数の練習問題
-
c言語 〇×ゲーム
-
商と剰余を同時に求める(C言語)
-
c言語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
卒業研究でよく分からないとこ...
-
【C++】関数ポインタの使い方
-
実数の整数部,小数部の取得
-
std::set<int> で、ある値が何...
-
C言語 エラーの原因がわからな...
-
c言語
-
system関数がうまくいかない
-
C++でvectorにテキストファイル...
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
return 1L
-
「{ } で囲むだけ」は正しい?
-
(マルチスレッド)_beginthrea...
-
PowerShellがうまくいかない
-
このプログラミング誰か教えて...
おすすめ情報