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

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

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

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

C++

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

Q&A

解決済

1回答

7272閲覧

C++でバッファオーバーランを解消したい。

hanamur

総合スコア45

Visual Studio

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

C++

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

0グッド

0クリップ

投稿2022/04/08 08:03

visual studio 2019でC++を使ってプログラムを書いています。
ビルドすると、
「'PP' への書き込み中にバッファー オーバーランが発生しました: 書き込み可能なサイズは 'ALLN*16' バイトですが、'32' バイトを書き込む可能性があります。」
という警告が出て、該当箇所に緑の波線が出ます。

A.cpp

1#include <iostream> 2#include <stdio.h> 3#include <stdlib.h> 4#include"C.h" 5 6int main() { 7 int aa[7] = { 3,5,3,3,2,5,4 }; 8 int aa2[7] = { 30,50,30,30,20,50,40 }; 9 int a = ISF(aa, aa2,7); 10 return 0; 11}

B.cpp

1#include <iostream> 2#include<stdlib.h> 3#include <stdio.h> 4#include"C.h" 5 6typedef struct { 7 double ka; 8 double se; 9} PathParam; 10 11int ISF(int aa[7], int aa2[7],int OSS) 12{ 13 int ALLN = 0; 14 int i, j, k=0; 15 for (i = 0; i < OSS; i++) ALLN += aa[i]; 16 PathParam* PP; 17 PP = new PathParam[ALLN]; 18 for (i = 0; i < OSS; i++) { 19 for (j = 0; j < aa[i]; j++) { 20 if (i > 3) { 21 PP[k].ka = i; 22 PP[k++].se = i; 23 } 24 else { 25 PP[k].ka = i; 26 PP[k++].se =i; 27 } 28 } 29 } 30 delete[] PP; 31 return 0; 32}

C.h

1int ISF(int aa[7], int aa2[7],int OSS);

B.cppの25行目が該当箇所です。
原因が特定できず長いプログラムですが、どうかよろしくお願いします。

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

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

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

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

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

hanamur

2022/04/08 20:10

構造体でなくしたり、ALLNを先に手計算で求めて代入したりするだけでも警告は消えました。 可能性だけでも警告を出してくるのですね。ありがとうございます。 今後の参考にさせていただきます。m(__)m
thkana

2022/04/08 22:32

解決したなら自己解決で回答にまとめてクローズしておいてくださいな。
guest

回答1

0

自己解決

おそらくhoshi-takanori氏の回答の通りだと思います。

投稿2022/04/09 10:28

hanamur

総合スコア45

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

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

majiponi

2022/04/10 00:12

現状のデータではオーバーランしませんが、例えば、配列aaに、負の数が要素として含まれていると… といったあたりを警告として出しているのではないでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問