Ошибки, баги, вопросы - страница 3437

 
Grigori.S.B #:

А не является ли здесь ошибочным вызов функции StringLen с двумя аргументами, да еще и разделенными пробелом?

Подойдем к вопросу формально: Ошибка или warning при компиляции есть? Нет - значит все нормально

Grigori.S.B #:

Или две части при компиляции собираются в одну строку?
В таком случае ожидаться должно имхо 3, а не 2.

void OnStart()
{
    Print(StringLen("\x1") +
          StringLen( "2" ));
}

Результат: 2

 
A100 #:

Результат: 2

Разве 

StringLen("\x1") + StringLen( "2" )

эквивалентно

StringLen("\x1" "2" )

???

 
Grigori.S.B #:

Разве 

эквивалентно

???

Должно быть эквивалентно, а иначе это трудноуловимый баг

 

Сайт атакуют? Вторые сутки почти невозможно писать на форуме. Ожидание по минуте.

 
fxsaber #:

Сайт атакуют? Вторые сутки почти невозможно писать на форуме. Ожидание по минуте.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Проблема с сайтом MQL5

MetaQuotes, 2023.12.18 07:45

Вчера мы перенастраивали сетевую инфраструктуру и были перебои с доступностью по CDN сети.

Извините за неудобства, пожалуйста.


 
Утечка памяти:
#import "msvcrt.dll"
    long memcpy( string&, long, long );
#import
void OnStart()
{
    string  text = "ABCDEFG";
    memcpy( text, 0, 0 );
}

Результат: 1 leaked strings left

 
A100 #:
Утечка памяти:

Результат: 1 leaked strings left

https://en.cppreference.com/w/cpp/string/byte/memcpy

У тебя два UB

If either dest or src is an invalid or null pointer, the behavior is undefined, even if count is zero.

If the objects are potentially-overlapping or not TriviallyCopyable, the behavior of  memcpy  is not specified and may be undefined.
Why would the behavior of std::memcpy be undefined for objects that are not TriviallyCopyable?
Why would the behavior of std::memcpy be undefined for objects that are not TriviallyCopyable?
  • 2015.04.21
  • R Sahu R Sahu 205k 14 14 gold badges 161 161 silver badges 278 278 bronze badges
  • stackoverflow.com
If the objects are not TriviallyCopyable (e.g. scalars, arrays, C-compatible structs), the behavior is undefined. At my work, we have used for a long time to bitwise swap objects that are not TriviallyCopyable using: and never had any issues. I understand that it is trivial to abuse with non-TriviallyCopyable objects and cause undefined...
 
Vladimir Simakov #:

Это всего лишь пример для доказательства наличия проблемы - без лишних подробностей, а memcpy вообще взята для простоты

Если для Вас принципиально - замените пример на такой:

#import "msvcrt.dll"
    long memcpy( string&, string&, long );
#import
void OnStart()
{
    string  text = "ABCDEFG";
    memcpy( text, text, 0 );
}
результат не изменится:  1 leaked strings left
 
A100 #:

Это всего лишь пример для доказательства проблемы без лишних подробностей, а memcpy вообще взята для простоты

Если для Вас принципиально - замените пример на такой:

результат не изменится

И опять 2 UB))) Overlaping objects и Non-trivial copyable objects

 
A100 #:

Это всего лишь пример для доказательства наличия проблемы - без лишних подробностей, а memcpy вообще взята для простоты

Если для Вас принципиально - замените пример на такой:

результат не изменится:  1 leaked strings left

И еще. string - это некий объект. ИМХО конечно, но там, что-то типа указателя на память в куче и размера строки.

Причина обращения: