前提・実現したいこと
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
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー