質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

解決済

visual studio C++ 初期化されていない可能性のあるポインター変数が使用されている。

bldtemporal
bldtemporal

総合スコア35

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

3回答

0評価

0クリップ

635閲覧

投稿2022/01/11 05:59

編集2022/01/13 11:51

恐れ入ります。先ほど”配列表記のエラー”について質問して、下記コードepisteme様からご教示頂いた下記コードでうまくいったので、”解決済”としたのですが、本番のコードに利用すると、下部に示す”初期化されていない可能性のあるローカルポインター変数PC(本番名PC7)が使用されている"とエラー表記されます。コード冒頭にPC=0と入れてみたのですが効果はありませんでした。再質問になってしまって誠に申し訳ないのですが、何か解決策はありませんでしょうか、

C++

#include <cstdio> #include <cstdlib> int main() { double* PC; int N = 1; if (N == 1) { double pc[5]{ 1, 0.885, 0.826, 0.794, 0.775 }; PC = pc; } printf("\n PC[1]=%7.3f\n", PC[1]); } エラー C4703 初期化されていない可能性のあるローカル ポインター変数 'PC7' が使用されています(本番変数名のPC7はPC相当です)

・ご指摘がありましたように、下記のように、N=2のケースを入れると、上記C4703のエラーとなります。何か対策がありますでしょうか、(コードは実際に合わせてforにしています。)

C++

/* **** Pointer print **** */ #include <cstdio> #include<cstdlib> int main() { int i; for (i = 0; i < 3; i++) { double* PC; int N = 1; if (N == 1) { static double pc[5]{ 1, 0.885, 0.826, 0.794, 0.775 }; PC = pc; }else if(N==2) { static double pc[5] = { 1, 0.769, 0.709, 0.671, 0.645 }; PC = pc; } if (i = 2) { printf("\n PC[1]=%7.3f, i=%d\n", PC[1],i); } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

int32_t

2022/01/11 06:01

Nが1以外の場合は何を表示したいのですか?
bldtemporal

2022/01/11 06:21

int32_t様:早速のご投稿有難うございます。実際にはN=1 or N=2です。{}中の数値で、異なる物性を表しています。
int32_t

2022/01/11 06:27

質問の答えになってないです。N==2の場合はprintf()で何を表示したいのですか?
episteme

2022/01/11 06:28

だったら else { N==1でなかったとき... } を追加すれば。 ...あ、やっちゃイケナイって言ったのに...
dodox86

2022/01/11 06:29

[visual studio C++ 配列表記のエラー] https://teratail.com/questions/377522 の回答でいただいていた指摘、注意事項がスッポ抜けているのですがそれは良いのでしょうか。
bldtemporal

2022/01/11 07:52

9nt_32t様、eisteme様、dodox86様: ・コードを、N=2の場合を入れて再編集しました。入力として与えるN=1、or N=2について計算するのですが、N=2については何も定義していないことになるのでしょうか、
episteme

2022/01/11 08:06

謎のfor-loop / 謎の if(i=2) が書き加えられてる...
ozwk

2022/01/11 08:08

int N=1と書いているからif(N==1)の中を通ってPCは確実に初期化されるじゃないか、 と思っているかもしれませんが、コンパイラはそんな細かいところまで見ていません。 で、事前に0を代入したりelse句を追加してみたりしても「効果はありませんでした」とのことですが、 本当でしょうか? ただ単に別の警告に変わっただけでは?
bldtemporal

2022/01/11 08:40

・episteme様:if(i=2)は4回ループする中でi=2の1回だけprintfしろ、と言うことです。 ・ozwk様:参考意見有難うございます。実際の大きなコードではPC=0としても効果はありませんでした(警告は変わらなかったと思いましたが)。 }else if(N=2){ でなく、}else{ のみですと投稿のモデルコードではきちんと計算されます。実コードでもprintfの部分ではエラーはでなくなりましたが、完全ではなく、まだc4703残ってしまっています(同じ原因かどうか検討中です)。
luuguas

2022/01/11 13:24

>if(i=2)は4回ループする中でi=2の1回だけprintfしろ、と言うことです。 それをコードにするなら「if(i==2)」です。数学の「=」とC言語の「=」の違い、C言語における「=」と「==」の違いを意識していますか? (本題から逸れてしまいますが、一応指摘しておきます) https://wa3.i-3-i.info/diff210programming.html

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。