🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C++/CLI

C++/CLIは、.NET Frameworkの共通言語基盤であるCLI向けにC++を拡張したプログラム言語です。前身のC++マネージ拡張と比較するとシンプルで分かりやすい構文になっており、高い可読性を持ちます。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

C++

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

Q&A

解決済

2回答

954閲覧

C++またはC++/CLIで二次元のcsvやtxtファイルを開き、二次元配列に格納したい

cyber11

総合スコア4

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

C++/CLI

C++/CLIは、.NET Frameworkの共通言語基盤であるCLI向けにC++を拡張したプログラム言語です。前身のC++マネージ拡張と比較するとシンプルで分かりやすい構文になっており、高い可読性を持ちます。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

C++

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

0グッド

0クリップ

投稿2019/10/16 07:54

前提・実現したいこと

C++/CLIで二次元要素が格納されている.csvや.txtファイルを開いて,二次元配列に格納するプログラムを制作したいのですが、うまくいきません。

このプログラムの前提として、スラッシュ\で上下を囲まれている部分の行数を計測し、そしてもともと与えられている列数の二つを用いて二次元配列x[][]に、要素を格納するというものです。
今後このプログラムを活用するためx[][]の行要素数は動的確保して、列数は静的に確保したいと考えています。

実行してみると101行目が原因でアクセス違反があったと表示されるのですが、どのように改善すればわかりませんでした。

プログラミング初心者なのでよくわからない文章になっているかもしれませんがよろしくお願いいたします。

vectorを使用するため勉強しようかと考えましたが時間がないためやめました

発生している問題・エラーメッセージ

'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\ntdll.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\mscoree.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\kernel32.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\KernelBase.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\msvcp140d.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\ucrtbased.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\vcruntime140d.dll' が読み込まれました。
スレッド 0x3cf8 はコード 0 (0x0) で終了しました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\advapi32.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\msvcrt.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\sechost.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\rpcrt4.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\sspicli.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\cryptbase.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\bcryptprimitives.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscoreei.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\shlwapi.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\combase.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\ucrtbase.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\gdi32.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\gdi32full.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\msvcp_win.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\user32.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\win32u.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\imm32.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\kernel.appcore.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\version.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\msvcr120_clr0400.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\psapi.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\psapi.dll' がアンロードされました
'csvipunt2.exe' (Win32): 'C:\Windows\assembly\NativeImages_v4.0.30319_32\mscorlib\f8a34a82917c2395879e9a994468cf9b\mscorlib.ni.dll' が読み込まれました。
'csvipunt2.exe' (CLR v4.0.30319: DefaultDomain): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\ole32.dll' が読み込まれました。
'csvipunt2.exe' (CLR v4.0.30319: DefaultDomain): 'C:\Users\ryo naoi\source\repos\csvipunt2\Debug\csvipunt2.exe' が読み込まれました。シンボルが読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\clrjit.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\SysWOW64\oleaut32.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\diasymreader.dll' が読み込まれました。
'csvipunt2.exe' (Win32): 'C:\Windows\assembly\NativeImages_v4.0.30319_32\System\1350bf95591b945fcde7b7bf77137518\System.ni.dll' が読み込まれました。
'csvipunt2.exe' (CLR v4.0.30319: DefaultDomain): 'C:\WINDOWS\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。
0x5B965542 (msvcp140d.dll) で例外がスローされました (csvipunt2.exe 内): 0xC0000005: 場所 0xCDCDCDCD への書き込み中にアクセス違反が発生しました

プログラム '[13092] csvipunt2.exe' はコード -1073741510 (0xc000013a) で終了しました。

エラーメッセージ

該当のソースコード

c++/cli c++

ソースコード

#include "pch.h"
#include <stdio.h>
#include <iostream>
#include <fstream> // ifstream, ofstream
#include <string> // string型使用のため

using namespace System;
using namespace std;
int main(cli::array<System::String ^> ^args)
{
ifstream fin;

ofstream fout; string s, s0, s1; const int j = 2; int p; p = j - 1; cout << "Data file name = "; cin >> s0; fin.open(s0); if (fin.fail()) { cout << "Opening the input file failed." << endl; cout << "何か整数値を入力して終了。" << endl; int ck; cin >> ck; return 9; } cout << "Output file name = "; cin >> s1; fout.open(s1); int n = 0; while (true) { fin >> s; if (s[0] == '/') break; // 最初の/の行まで読み飛ばす } while (true) { fin >> s; if (s[0] == '/') break; // 次の/の行まで数える n++; } n /= j; // 1行にj個のデータ fout << "No. of data = " << n << endl; fin.close(); fin.open(s0); // 再度、入力データファイルを開きなおす。 while (true) { fin >> s; if (s[0] == '/') break; } //cout << "InPut retu namber = "; //cin >> j; double **x = new double*[n]; for (int i = 0; i < n; i++) { x[n] = new double[j]; } for (int i = 0; i < n; i++) { for (int k = 0; k < p; k++) { fin >> x[i][k]; // 1行からj個のデータを読み込む } } fout << "\nData.." << endl; for (int i = 0; i < n; i++) { for (int k = 0; k < p; k++) { fout << "x[" << i << "][" << k << "] = " << x[i][k] << endl; } } //for (int i = 0; i < n; i++) { // fout << "x[" << i << "] = " << x[i] << endl; // sx += x[i]; //} for (int i = 0; i < n; i++) { delete[] x[i]; } delete[] x; fin.close(); fout.close(); cout << n << " 組みのデータが処理されました。" << endl; cout << "何か整数値を入力すると終了します。" << endl; cin >> n; return 0;

}

試したこと

ここに問題に対して試したことを記載してください。
二次元配列の宣言について、動的確保について等

補足情報(FW/ツールのバージョンなど)

Visual Studio2019
ここにより詳細な情報を記載してください。

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

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

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

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

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

yumetodo

2019/10/16 08:12

ソースコードが見ずらいです。markdownのコードブロック記法を用いてください
guest

回答2

0

自己解決

92行目の変数が間違っていた

投稿2019/10/16 08:12

cyber11

総合スコア4

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

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

0

new/deleteを使用しないでください。std::vectorを使用しましょう。

あとそもそもなんでC++/CLIを使ってるのでしょうか?C++/CLIはC++と.NETの双方に精通した上級者向けの用途も限定された言語です。よほど特別な事情がないならC++/CLIのことは忘れるべきでしょう

投稿2019/10/16 08:12

yumetodo

総合スコア5852

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

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

cyber11

2019/10/17 07:09

アドバイスありがとうございます。 余裕を作ってvectorについて勉強しようと思います。 C++/CLIをやめてC#などに移行したいのですが、このプログラムを制作した方が既に研究室から去っており C++/CLIを使っている理由がわからないため、惰性でC++/CLIを使ってます…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問