質問編集履歴
2
追記
test
CHANGED
File without changes
|
test
CHANGED
@@ -111,3 +111,63 @@
|
|
111
111
|
##追記
|
112
112
|
|
113
113
|
質問文を書いている途中で気付いたのですが、`arr2d`がint型のvectorにしているのに対して、`newarr`はunsigned int型、と、型が違っていてまずいのではないかと思いました。この問題に直接関係あるかはわかりませんが、とりあえず`vector<vector<int>>`から`vector<vector<unsigned int>>`に変更してみようと思います。
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
##追追記
|
118
|
+
|
119
|
+
[このサイト]()を見ると、「.size()によって返される値はint型ではなくsize_t型」ということを知ったので、上記のコードの一部を以下のように書き換えました。しかし、問題はそこではなかったようです。(依然として`sizeof(newarr)`の値は8のままです)
|
120
|
+
|
121
|
+
```
|
122
|
+
|
123
|
+
//unsigned int**型の2次元配列newarrに変換
|
124
|
+
|
125
|
+
size_t sizeOfCSV = arr2d.size();//サイズは1025x1025
|
126
|
+
|
127
|
+
//デバッグ用のcout
|
128
|
+
|
129
|
+
cout << "arr2d size:" << arr2d.size() << " arr2d.at(0).at(0)" << arr2d.at(0).at(0) <<endl;
|
130
|
+
|
131
|
+
|
132
|
+
|
133
|
+
unsigned int** newarr = new unsigned int* [sizeOfCSV];
|
134
|
+
|
135
|
+
|
136
|
+
|
137
|
+
for (size_t k = 0; k < sizeOfCSV; ++k) {
|
138
|
+
|
139
|
+
newarr[k] = new unsigned int[sizeOfCSV];
|
140
|
+
|
141
|
+
|
142
|
+
|
143
|
+
for (size_t i = 0; i < sizeOfCSV; ++i) {
|
144
|
+
|
145
|
+
newarr[k][i] = arr2d.at(k).at(i);
|
146
|
+
|
147
|
+
}
|
148
|
+
|
149
|
+
}
|
150
|
+
|
151
|
+
//デバッグ用のcout
|
152
|
+
|
153
|
+
cout << "newarr size:" << sizeof(newarr) << " newarr[0][0]:" << newarr[0][0] << endl;
|
154
|
+
|
155
|
+
|
156
|
+
|
157
|
+
|
158
|
+
|
159
|
+
return newarr;
|
160
|
+
|
161
|
+
```
|
162
|
+
|
163
|
+
## 謎の挙動
|
164
|
+
|
165
|
+
また、試しに、`sizeof(newarr)`の値である8を超える要素`newarr[10][10]`を参照してみたところ、なぜか成功し、普通にcsvに書かれていた値を返しました。ただ、Visual Studioに以下の警告が出ました:
|
166
|
+
|
167
|
+
```
|
168
|
+
|
169
|
+
重大度レベル コード 説明 プロジェクト ファイル 行 抑制状態
|
170
|
+
|
171
|
+
警告 C6385 'newarr' から無効なデータを読み取っています: 読み取り可能なサイズは 'sizeOfCSV*8' バイトですが、'88' バイトを読み取る可能性があります。
|
172
|
+
|
173
|
+
```
|
1
mia
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
int型のvectorからunsigned int**型配列への変換に失敗してしまう
|
test
CHANGED
File without changes
|