2015-11-21 14 views

cevap

8

Sen depoda dinamik bir dizi boyutlandırabilirsiniz (yani sözleşme düzeyinde bildirilen bir dizi) “arrayname.length =;” ile Ama “lvalue” alırsanız hata Muhtemelen iki şeyden birini yanlış yapıyorsun. numaralı bellekte veya numaralı dizilerde bir diziyi yeniden boyutlandırmaya çalışıyor olabilirsiniz dinamik olmayan dizisini yeniden boyutlandırmaya çalışıyor olabilirsiniz.

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

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

ÖNEMLİ NOT: sağlamlığı içinde, diziler muhtemelen bunları ilan için kullanılan konum şekilde geriye doğru beyan edilir. Ve bazı dinamik ve bazı dinamik olmayan bileşenlerle bir> = 2D diziniz varsa, # 2'yi ihlal edebilir ve nedenini anlayabilirsiniz. Ayrıca dizilere “normal” yoldan erişildiğini unutmayın. İşte en bu "geri" beyan paradigmasının bazı örnekler eylem şunlardır:

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

Değişken uzunluktaki dizim geçici mi ve bellek olarak mı kalmalı? Uzunluğunu değiştiremem ya da yeni bir öğeyi ona itemem? – okwme

0

Karşılaşılan aynı sorun ve ne zorunda ben küresel bir depolama dizisini değiştirmeye çalışıyordu beri storage anahtar kelime kullanmak oldu.

bytes32[] storage someArray = someGlobalStorageArray;