2015-11-21 14 views

Trả lời

8

Bạn có thể thay đổi kích thước một mảng động trong lưu trữ (ví dụ một mảng được khai báo ở mức độ hợp đồng) với “arrayname.length =;” Nhưng nếu bạn nhận được “giá trị trái” lỗi , có thể bạn đang làm một trong hai điều sai. Bạn có thể đang cố định lại kích thước một mảng trong bộ nhớ hoặc Bạn có thể đang cố định lại kích thước một mảng không động.

int8[] memory somearray;  // CASE 1 
somearray.length++;   // illegal 

int8[5] somearray;   // CASE 2 
somearray.length++;   // illegal 

LƯU Ý QUAN TRỌNG: Trong tính kiên cố, mảng được khai báo ngược với cách bạn có thể đã sử dụng để khai báo chúng. Và nếu bạn có mảng> = 2D với một số thành phần động và một số thành phần không động, bạn có thể vi phạm số 2 và không hiểu tại sao. Cũng lưu ý rằng các mảng được truy cập theo cách "bình thường". Dưới đây là một số ví dụ của điều này "lạc hậu" khai mô hình trong hành động:

int8[][5] somearray; // This is 5 dyn arrays, NOT a dyn array-of-arrays w/len=5 
// so... 
somearray[4];   // the last dynamic array 
somearray[1][12];  // the 13th element of the second dynamic array 
// thus... 
somearray.length++; // illegal. This array has length 5. Always. 
somearray[0].length++;// legal 
+0

nếu mảng độ dài biến của tôi chỉ là tạm thời và phải là bộ nhớ? tôi không thể sửa đổi độ dài hoặc đẩy một mục mới vào nó? – okwme

0

gặp cùng một vấn đề và những gì tôi đã phải là sử dụng từ khóa storage kể từ khi tôi đã cố gắng để sửa đổi một mảng lưu trữ toàn cầu.

bytes32[] storage someArray = someGlobalStorageArray; 
Các vấn đề liên quan