@@ -143,12 +143,16 @@ impl<A, V> From<Vec<V>> for Array2<A>
143
143
let ptr = xs. as_mut_ptr ( ) ;
144
144
let len = xs. len ( ) ;
145
145
let cap = xs. capacity ( ) ;
146
+ let expand_len = len * V :: len ( ) ;
146
147
forget ( xs) ;
147
148
unsafe {
148
149
let v = if size_of :: < A > ( ) == 0 {
149
- Vec :: from_raw_parts ( ptr as * mut A , len * V :: len ( ) , cap)
150
+ Vec :: from_raw_parts ( ptr as * mut A , expand_len, expand_len)
151
+ } else if V :: len ( ) == 0 {
152
+ Vec :: new ( )
150
153
} else {
151
- Vec :: from_raw_parts ( ptr as * mut A , len * V :: len ( ) , cap * V :: len ( ) )
154
+ let expand_cap = cap * V :: len ( ) ;
155
+ Vec :: from_raw_parts ( ptr as * mut A , expand_len, expand_cap)
152
156
} ;
153
157
ArrayBase :: from_shape_vec_unchecked ( dim, v)
154
158
}
@@ -164,14 +168,16 @@ impl<A, V, U> From<Vec<V>> for Array3<A>
164
168
let ptr = xs. as_mut_ptr ( ) ;
165
169
let len = xs. len ( ) ;
166
170
let cap = xs. capacity ( ) ;
171
+ let expand_len = len * V :: len ( ) * U :: len ( ) ;
167
172
forget ( xs) ;
168
173
unsafe {
169
174
let v = if size_of :: < A > ( ) == 0 {
170
- Vec :: from_raw_parts ( ptr as * mut A , len * V :: len ( ) , cap)
175
+ Vec :: from_raw_parts ( ptr as * mut A , expand_len, expand_len)
176
+ } else if V :: len ( ) == 0 || U :: len ( ) == 0 {
177
+ Vec :: new ( )
171
178
} else {
172
- let len = len * V :: len ( ) * U :: len ( ) ;
173
- let cap = cap * V :: len ( ) * U :: len ( ) ;
174
- Vec :: from_raw_parts ( ptr as * mut A , len, cap)
179
+ let expand_cap = cap * V :: len ( ) * U :: len ( ) ;
180
+ Vec :: from_raw_parts ( ptr as * mut A , expand_len, expand_cap)
175
181
} ;
176
182
ArrayBase :: from_shape_vec_unchecked ( dim, v)
177
183
}
0 commit comments