質問編集履歴
2
追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -54,4 +54,34 @@
|
|
54
54
|
どこがおかしいのでしょうか?ご回答よろしくお願い致します。
|
55
55
|
|
56
56
|
##追記
|
57
|
-
質問文を書いている途中で気付いたのですが、`arr2d`がint型のvectorにしているのに対して、`newarr`はunsigned int型、と、型が違っていてまずいのではないかと思いました。この問題に直接関係あるかはわかりませんが、とりあえず`vector<vector<int>>`から`vector<vector<unsigned int>>`に変更してみようと思います。
|
57
|
+
質問文を書いている途中で気付いたのですが、`arr2d`がint型のvectorにしているのに対して、`newarr`はunsigned int型、と、型が違っていてまずいのではないかと思いました。この問題に直接関係あるかはわかりませんが、とりあえず`vector<vector<int>>`から`vector<vector<unsigned int>>`に変更してみようと思います。
|
58
|
+
|
59
|
+
##追追記
|
60
|
+
[このサイト]()を見ると、「.size()によって返される値はint型ではなくsize_t型」ということを知ったので、上記のコードの一部を以下のように書き換えました。しかし、問題はそこではなかったようです。(依然として`sizeof(newarr)`の値は8のままです)
|
61
|
+
```
|
62
|
+
//unsigned int**型の2次元配列newarrに変換
|
63
|
+
size_t sizeOfCSV = arr2d.size();//サイズは1025x1025
|
64
|
+
//デバッグ用のcout
|
65
|
+
cout << "arr2d size:" << arr2d.size() << " arr2d.at(0).at(0)" << arr2d.at(0).at(0) <<endl;
|
66
|
+
|
67
|
+
unsigned int** newarr = new unsigned int* [sizeOfCSV];
|
68
|
+
|
69
|
+
for (size_t k = 0; k < sizeOfCSV; ++k) {
|
70
|
+
newarr[k] = new unsigned int[sizeOfCSV];
|
71
|
+
|
72
|
+
for (size_t i = 0; i < sizeOfCSV; ++i) {
|
73
|
+
newarr[k][i] = arr2d.at(k).at(i);
|
74
|
+
}
|
75
|
+
}
|
76
|
+
//デバッグ用のcout
|
77
|
+
cout << "newarr size:" << sizeof(newarr) << " newarr[0][0]:" << newarr[0][0] << endl;
|
78
|
+
|
79
|
+
|
80
|
+
return newarr;
|
81
|
+
```
|
82
|
+
## 謎の挙動
|
83
|
+
また、試しに、`sizeof(newarr)`の値である8を超える要素`newarr[10][10]`を参照してみたところ、なぜか成功し、普通にcsvに書かれていた値を返しました。ただ、Visual Studioに以下の警告が出ました:
|
84
|
+
```
|
85
|
+
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
|
86
|
+
警告 C6385 'newarr' から無効なデータを読み取っています: 読み取り可能なサイズは 'sizeOfCSV*8' バイトですが、'88' バイトを読み取る可能性があります。
|
87
|
+
```
|
1
mia
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
int型のvectorからunsigned int**型配列への変換に失敗してしまう
|
body
CHANGED
File without changes
|