恐れ入ります。先ほど”配列表記のエラー”について質問して、下記コードepisteme様からご教示頂いた下記コードでうまくいったので、”解決済”としたのですが、本番のコードに利用すると、下部に示す”初期化されていない可能性のあるローカルポインター変数PC(本番名PC7)が使用されている"とエラー表記されます。コード冒頭にPC=0と入れてみたのですが効果はありませんでした。再質問になってしまって誠に申し訳ないのですが、何か解決策はありませんでしょうか、
C++
1#include <cstdio> 2#include <cstdlib> 3 4int main() { 5 double* PC; 6 int N = 1; 7 if (N == 1) { 8 double pc[5]{ 1, 0.885, 0.826, 0.794, 0.775 }; 9 PC = pc; 10 } 11 printf("\n PC[1]=%7.3f\n", PC[1]); 12} 13 14エラー C4703 初期化されていない可能性のあるローカル ポインター変数 'PC7' が使用されています(本番変数名のPC7はPC相当です)
・ご指摘がありましたように、下記のように、N=2のケースを入れると、上記C4703のエラーとなります。何か対策がありますでしょうか、(コードは実際に合わせてforにしています。)
C++
1 /* **** Pointer print **** */ 2#include <cstdio> 3#include<cstdlib> 4int main() { 5 int i; 6 for (i = 0; i < 3; i++) { 7 double* PC; 8 int N = 1; 9 if (N == 1) { 10 static double pc[5]{ 1, 0.885, 0.826, 0.794, 0.775 }; 11 PC = pc; 12 }else if(N==2) { 13 static double pc[5] = { 1, 0.769, 0.709, 0.671, 0.645 }; 14 PC = pc; 15 } 16 if (i = 2) { printf("\n PC[1]=%7.3f, i=%d\n", PC[1],i); } 17 } 18}
Nが1以外の場合は何を表示したいのですか?
int32_t様:早速のご投稿有難うございます。実際にはN=1 or N=2です。{}中の数値で、異なる物性を表しています。
質問の答えになってないです。N==2の場合はprintf()で何を表示したいのですか?
だったら else { N==1でなかったとき... } を追加すれば。
...あ、やっちゃイケナイって言ったのに...
[visual studio C++ 配列表記のエラー]
https://teratail.com/questions/377522
の回答でいただいていた指摘、注意事項がスッポ抜けているのですがそれは良いのでしょうか。
9nt_32t様、eisteme様、dodox86様:
・コードを、N=2の場合を入れて再編集しました。入力として与えるN=1、or N=2について計算するのですが、N=2については何も定義していないことになるのでしょうか、
謎のfor-loop / 謎の if(i=2) が書き加えられてる...
int N=1と書いているからif(N==1)の中を通ってPCは確実に初期化されるじゃないか、
と思っているかもしれませんが、コンパイラはそんな細かいところまで見ていません。
で、事前に0を代入したりelse句を追加してみたりしても「効果はありませんでした」とのことですが、
本当でしょうか?
ただ単に別の警告に変わっただけでは?
・episteme様:if(i=2)は4回ループする中でi=2の1回だけprintfしろ、と言うことです。
・ozwk様:参考意見有難うございます。実際の大きなコードではPC=0としても効果はありませんでした(警告は変わらなかったと思いましたが)。
}else if(N=2){ でなく、}else{ のみですと投稿のモデルコードではきちんと計算されます。実コードでもprintfの部分ではエラーはでなくなりましたが、完全ではなく、まだc4703残ってしまっています(同じ原因かどうか検討中です)。
>if(i=2)は4回ループする中でi=2の1回だけprintfしろ、と言うことです。
それをコードにするなら「if(i==2)」です。数学の「=」とC言語の「=」の違い、C言語における「=」と「==」の違いを意識していますか? (本題から逸れてしまいますが、一応指摘しておきます)
https://wa3.i-3-i.info/diff210programming.html
回答3件
あなたの回答
tips
プレビュー