Проблему с массивом строк не могу понять ... - страница 2

 
Rosh:
Chen:

Еще одно наблюдения. Я третьего дня поднимал аналогичный вопрос, но в более общем виде: Как определить пустую строковую переменную? Были предложены решения выхода из этой ситуации (спасибо откливнушимся), но вопрос так и остался открытым. Поскольку остальные не придали значения обсуждению (как разработчики, так и тредстартер, пока его тот же петух в то ж-ж-е место не клюнул ;), я пользуюсь случаем спросить авторитетного мнения Rosh'а:

Я не силен в Си, и траблы с передачей строковых переменных в dll не могу объяснить. Сам как-то наступал на такие грабли (Crash в "About"). Хотя с тех пор я лучше представляю механизм распределения памяти под переменные, но давать советы и решения все же не берусь.

Благодарю за ссылку. Изучу на досуге. Буду на Ваших граблях учиться :)
 

Да, совет Роша помог. Спасибо!

 

В своё время мы убрали вывод в лог сообщений об ошибках 4002, 4008 и 4009. Вызовите GetLastError() после первого же обращения к неинициализированной строке массива и Вы получите 4009.

 
stringo:

В своё время мы убрали вывод в лог сообщений об ошибках 4002, 4008 и 4009. Вызовите GetLastError() после первого же обращения к неинициализированной строке массива и Вы получите 4009.


Но вообще опертор типа PosComments[i] = PosComments[i] + "Z" есть эквивалент работы со строковаой переменной

string CommentStr;

CommentStr = CommentStr + "Z";

Во втором случае тоже надо инициализировать сначала строку явно?

Мне же кажется, если применяется оператор CommentStr + "Z" к неинициализированной строке, то она должна по умолчанию быть инициализировна пустой строкой и выделена память для строкового объекта CommentStr. Хотя возможно это замедлит выполнение оператор объединения строк "+". Но не думаю что условие проверки скрадёт много процессорного времени.

Не хочется после каждого оператрока вызывать GetLastError особенно где очевидно поведение. Не хочется захламлять код ненужными проверками, где они впринципе не нужны.

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