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

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

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

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

Q&A

解決済

2回答

747閲覧

NULLポインターを逆参照しています。

hanamur

総合スコア45

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

C++

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

0グッド

0クリップ

投稿2022/05/26 15:21

visual studio2019を使ってC++でプログラムを作っているのですが、構造体を作った際に
「NULLポインター○○を逆参照しています」というメッセージが出てきてしまいます(○○は変数名)。これを解消したく質問させていただきました。

maim.cpp

1#include <iostream> 2#include <stdio.h> 3#include <stdlib.h> 4#include<string.h> 5 6typedef struct { 7 int aaa[1000]; 8} structure1; 9 10structure1* ccc; 11 12int main() { 13 14 int i, j; 15 ccc=(structure1*)malloc(10*sizeof(structure1)); 16 for (i = 0; i < 10; i++) { 17 for (j = 0; j < 1000; j++) { 18 if (ccc[i].aaa[j] != NULL) { 19 ccc[i].aaa[j] = 0; 20 } 21 } 22 } 23 free(ccc); 24}

構造体がネストになっていることが特殊です。
ccc[i].aaa[j]が最初に出てきたところに緑の波線で表示されます。
どうかよろしくお願いします。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

thkana

2022/05/26 23:09

> NULLポインター○○を逆参照しています なぜ敢えて変数名を隠すのですか? ccc以外のなにかが表示されるのですか? 深い意図があるのかと勘ぐってしまいますが。 (どうでもいいけど、C++ならC++らしく書けばいいし、C言語のお勉強ならC言語として扱えばいいのに、と思います。インクルードでiostreamとstring.hって、なんだかなぁ...)
y_waiwai

2022/05/26 23:12

エラーが出たなら、エラーメッセージを提示しましょう エラーメッセージは、よけいな省略翻訳しないで出たそのママをコピペで提示してください
guest

回答2

0

ベストアンサー

コードと特徴的っぽいキーワード 'C6011 逆参照'でぐぐってみると、公式の解説ページ がヒットしました。参照してください。
「メッセージ」は実際に以下のどれかを判別して然るべく対処します。

  • エラー: 文法的な間違い。つまりその間違いによってプログラムとして成立していないもの。直さないと先に進めない
  • 警告: 文法的に正しい解釈は可能であるが、経験的に間違っている可能性があることをコンパイラが教えてくれるもの。内容を理解し「間違いではない」ことを確認したなら放置してもよい。もちろん、実際に間違いであることも多いので、その場合は修正しないとプログラムが正しく動かないこともある。

今回出たのは、「警告」で、しかもコンパイラが出しているのではなくIDEの文法解析が文句を言ってきているだけです。「問題ない」と自信を持って言えるまで理解したなら放置してもかまいません。
自信を持てたなら、
#pragma warning (disable:6011)
を表示箇所以前のどこかに入れればその警告は抑止されます。

一応いっておくと、mallocの返り値のNULLチェックは「お作法」です。

構造体がネストになっていることが特殊

いや、これくらい普通です。

投稿2022/05/26 23:44

thkana

総合スコア7639

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

malloc() が失敗して NULL を返すことがあるので、 malloc() の後にたとえば「ccNULL だったらエラーを表示して終了」のようなコードを入れてみてください。


「逆参照」というのは dereference の誤訳です。「NULLポインターの可能性がある変数○○から間接参照しています」あたりが適切な言い回しでしょう。

投稿2022/05/26 21:37

編集2022/05/26 23:33
int32_t

総合スコア20884

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問