c言語の質問です。
3次元の計算を行いたくて初期値を設定したら
エラーで配列または、ポインターでない変数に添字が使われました、pointer to object型が必要ですと出ました。何が原因なのでしょうか?
int S, i, j,z;
for (i = 0; i < S; i++) {
for (j = 0; j < S; j++) {
for(z = 0; z < S; z++) {
if (i == 0 || i == S - 1) {
a[i][j][z] = 300;
} else if (j == 0 || j == S - 1) {
a[i][j][z] = 300;
}
else if (z == 0 || z == S - 1) {
a[i][j][z]=300;
}
else {
a[i][j][z] = 0;
}
}
}
}
A 回答 (7件)
- 最新から表示
- 回答順に表示
No.7
- 回答日時:
そもそもCではファイルのトップレベルにforとか書けないから、質問のコードは色々と省略されている筈。
メイン関数もないし。配列の宣言も見あたらないが、これでは書き忘れたのか、トンデもない宣言が省略されているのかも分からない。
全然質問に載せるべき情報足りて無いので、必要なコードを全部載せよう。
No.6
- 回答日時:
> エラーで
> 配列または、ポインターでない変数に添字が使われました、
> pointer to object型が必要ですと出ました。
> 何が原因なのでしょうか?
そのエラーの原因は、配列 a が宣言されていないことです。
質問のコードを含む関数より前の、関数外の場所に
#define S 10000
int a[S][S][S];
と書きましょう。
それにともない、質問のコードの
int S, i, j, z;
は
int i, j, z;
に修正します。
上記の 10000 は、あなたが設定したい配列のサイズに合わせて
変更してください。
あと、ループの回し方が奇妙ですね。
int i, j, b = 300;
for (i = 0; i < S; i++)
for (j = 0; j < S; j++) {
a[i][j][0] = b;
a[i][j][S-1] = b;
a[0][i][j] = b;
a[S-1][i][j] = b;
a[i][0][j] = b;
a[i][S-1][j] = b;
}
でよいのではありませんか?
No.5
- 回答日時:
配列aの定義がないですし変数Sの初期値もないので、どれだけの要素数が必要かがわからずエラーになります。
下記の内容を1行目の後に入れましょう。
S=100;
int a[S][S][S];
No.4
- 回答日時:
エラーメッセージによれば、"pointer to object型が必要です"ということは、多分aがポインタ型ではなく、ポインタ型に変更する必要があるということです。
3次元配列を宣言していると仮定しますが、その宣言がコードの中にないようです。配列aを宣言する際に、ポインタ型として宣言する必要があります。例えば、次のように宣言できます。
c
Copy code
int S = 10; // 適切なサイズに変更してください
int ***a;
// aのメモリ確保
a = (int ***)malloc(S * sizeof(int**));
for (i = 0; i < S; i++) {
a[i] = (int **)malloc(S * sizeof(int*));
for (j = 0; j < S; j++) {
a[i][j] = (int *)malloc(S * sizeof(int));
}
}
// 以降のコード
for (i = 0; i < S; i++) {
for (j = 0; j < S; j++) {
for(z = 0; z < S; z++) {
if (i == 0 || i == S - 1) {
a[i][j][z] = 300;
} else if (j == 0 || j == S - 1) {
a[i][j][z] = 300;
} else if (z == 0 || z == S - 1) {
a[i][j][z] = 300;
} else {
a[i][j][z] = 0;
}
}
}
}
// メモリ解放
for (i = 0; i < S; i++) {
for (j = 0; j < S; j++) {
free(a[i][j]);
}
free(a[i]);
}
free(a);
このコードでは、aをint型の3次元ポインタとして宣言し、動的にメモリを確保しています。そして、計算が終わったらメモリを解放しています。適切なサイズやメモリの解放方法は、実際のプログラムの要件に応じて調整してください。
以上 chatGPTからの回答です。
No.3
- 回答日時:
aの定義はどうなっていますか。
Sの値は、どうなってますか。
例えば、以下のソースは、エラーにならず、正常に完了します。
#include <stdio.h>
int main()
{
int S, i, j, z;
S=10;
int a[10][10][10];
for (i = 0; i < S; i++) {
for (j = 0; j < S; j++) {
for (z = 0; z < S; z++) {
if (i == 0 || i == S - 1) {
a[i][j][z] = 300;
} else if (j == 0 || j == S - 1) {
a[i][j][z] = 300;
} else if (z == 0 || z == S - 1) {
a[i][j][z] = 300;
} else {
a[i][j][z] = 0;
}
}
}
}
return 0;
}
No.2
- 回答日時:
aはどこで定義してんの
Sの値はどこで初期化してんの
あとどこでエラーかわからん場合は
ソースバックアップしたうえで後ろからガッツリ削除してみろ
たとえば今回だと一番中のループを削除してmakeは通るのか
→通るなら削除した部分がエラー、通らないなら他の部分がエラー
そうしてどこの部分がエラーかを調べるんだ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- C言語・C++・C# プログラムの時、フローチャートはどうなりますか?図でお願いします。 int main(void) { 1 2022/10/01 22:45
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
このQ&Aを見た人はこんなQ&Aも見ています
-
新NISA制度は今までと何が変わる?非課税枠の拡大や投資対象の変更などを解説!
少額から投資を行う人のための非課税制度であるNISAが、2024年に改正される。おすすめの銘柄や投資額の目安について教えてもらった。
-
c言語
C言語・C++・C#
-
これなにがちがうんですか??
C言語・C++・C#
-
C言語の関数と配列に関する質問
C言語・C++・C#
-
-
4
C言語について。
C言語・C++・C#
-
5
VisualStudio2022でC言語プログラムで全角文字を使用すると不明なエラーが表示される
C言語・C++・C#
-
6
double型が正常に認識されていない恐れ
C言語・C++・C#
-
7
gccを行ってもexeファイルが生成されない
C言語・C++・C#
-
8
C言語って古いですか?
C言語・C++・C#
-
9
C言語 列挙型(enum型)変数について
C言語・C++・C#
-
10
MACで動く実行ファイルをWindowsで作る方法(クロスコンパイラ紹介ください)
C言語・C++・C#
-
11
C言語 配列と関数の練習問題
C言語・C++・C#
-
12
C言語について
C言語・C++・C#
-
13
c言語
C言語・C++・C#
-
14
プログラミング言語の制作方法について
C言語・C++・C#
-
15
どなたかこのプログラミングを完成させて欲しいです。 ヒントはこちらです↓ 青色:ゲームプログラムのル
C言語・C++・C#
-
16
質問失礼します。 プログラム言語を一つも知らないのですが、C♯の勉強をしてみたいです。おすすめの教材
C言語・C++・C#
-
17
C言語について。
C言語・C++・C#
-
18
C言語 バッファについて。
C言語・C++・C#
-
19
C言語 バッファについて。
C言語・C++・C#
-
20
C言語 解答について。
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
define で 配列
-
C言語から質問です。
-
C言語の2次元配列 容量が大き...
-
構造体のextern方法
-
C言語の課題が出たのですが自力...
-
c言語 構造体
-
C#でのフィボナッチ数列
-
C言語において、 配列要素をひ...
-
C言語でエラーの直し方が分かり...
-
構造体の配列 char *' 型は 'ch...
-
MFC - ダイアログボックスのPic...
-
2番目の最大値を求める
-
char型配列をint型に代入するには
-
関数への構造体の配列の渡し方<...
-
C言語の配列のコピーについて
-
C言語についてです 5人のテスト...
-
ポインタを使って構造体の配列...
-
関数のプロトタイプ宣言
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
関数から配列を返すには?
-
配列の要素数に変数を入れたい...
-
c言語
-
構造体のextern方法
-
define で 配列
-
C#で構造体の配列を持った構造...
-
C言語において、 配列要素をひ...
-
コンボボックスでデフォルト値...
-
2番目の最大値を求める
-
C言語の2次元配列 容量が大き...
-
C#で配列が空かを判定するには?
-
MFCのCArrayを使った二次元配列
-
C言語の課題が出たのですが自力...
-
C言語 ファイルの指定された行...
-
Cのエラー
-
ポインタを使って構造体の配列...
-
配列のアドレス部
-
char型配列をint型に代入するには
-
MFC - ダイアログボックスのPic...
-
C言語から質問です。
おすすめ情報