bład wykonania 5051
5051 — ERR_SMALL_ASSERIES_ARRAY
Tablica odbiorcza jest szeregiem czasowym i ma za mały rozmiar. To jest różnica, o której łatwo zapomnieć: zwykła tablica dynamiczna
1 fragment kodu z tej strony przeszedł przez kompilator MetaEditor build 6090, 2026-08-05.
2026-08-03 14:10:38.220 Ekspert (EURUSD,H1) ArrayCopy zwrocilo -1, blad 5051Co ten kod znaczy
Tablica oznaczona przez ArraySetAsSeries jako szereg czasowy nie powiększa się automatycznie przy kopiowaniu. Jeśli jest za mała, operacja zawodzi.
Skąd się bierze
ArrayCopydo tablicy będącej szeregiem, bez wcześniejszegoArrayResize- tablica statyczna oznaczona jako szereg
- rozmiar wyliczony z liczby elementów źródła, bez uwzględnienia przesunięcia
Co z tym zrobić
To jest różnica, o której łatwo zapomnieć: zwykła tablica dynamiczna powiększa się przy kopiowaniu sama, ale tablica oznaczona jako szereg czasowy już nie. Indeksowanie od końca wyklucza dopisywanie na końcu, więc rozmiar trzeba nadać wcześniej.
double zrodlo[];
double cel[];
ArraySetAsSeries(cel, true);
//--- bez tej linii ArrayCopy zwroci -1 z kodem 5051
ArrayResize(cel, ArraySize(zrodlo));
if(ArrayCopy(cel, zrodlo) < 0)
PrintFormat("Kopiowanie nie powiodlo sie, blad %d", GetLastError());Funkcje z rodziny Copy — CopyBuffer, CopyRates, CopyTicks — zachowują się inaczej: same nadają rozmiar tablicy odbiorczej, także oznaczonej jako szereg. Ten kod dotyczy więc głównie ArrayCopy i ręcznego przepisywania danych.