Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / C++ Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 Как правильно вызвать указатель на функцию с парам строкой?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
Что то не выходит, валится приложение.
И std::string пробовал и char, char *, char[])))))
29 окт 20, 14:06    [22222911]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

Если ничего не помогает, вызывайте так, как описано в заголовке/документации.

Posted via ActualForum NNTP Server 1.5

29 окт 20, 14:08    [22222913]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
Dima T
Member

Откуда:
Сообщений: 15282
Указатель как объявлен?

Если это экспортируемая из DLL функция, то как-то так
typedef int (WINAPI *DECODE) (const char*);
...

DECODE fn_decode = ...;
char* str = ...;
fn_decode(str);
29 окт 20, 14:29    [22222933]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
Dima T,
Спасибо.
Оказалось банальность в высшей степени.
Не успел присваивать в класс поле адрес функции.
В результате там null или мусор....
И главное отладчик пишет
SIGSEGV от операционки.
Ну я и не догадался что там пусто.
....
Работает простой std::string.
Везде его стараюсь.
...
Счас попробую на if nulll проверки добавить.
29 окт 20, 14:35    [22222945]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
Возможно студия показывает более вменяемое сообщение на данный юзкейс чем Qt Creator.
Imho
29 окт 20, 14:42    [22222955]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

PetroNotC Sharp
И главное отладчик пишет
SIGSEGV от операционки.

Так собирать надо с отладочной информацией. Тогда он и место покажет, и call stack.

Posted via ActualForum NNTP Server 1.5

29 окт 20, 14:58    [22222974]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
Dimitry Sibiryakov,
Думаю тут автоматом это режим. Как и в студии.
Кнопа - отладка.
Бряк на вызове функции возле main() из класс поставил.
При входе в метод падение.
Я заметил что в плюсах надо руками инициализировать поля указатели.
If (p) не работает из коробки.
29 окт 20, 15:20    [22222985]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
Адрес при ошибке (мусор) - 0х56
Адрес после
pointerMy = nullptr;
0x0
29 окт 20, 15:27    [22222990]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
Dima T
Member

Откуда:
Сообщений: 15282
PetroNotC Sharp
Я заметил что в плюсах надо руками инициализировать поля указатели.
If (p) не работает из коробки.

Любые указатели надо инициализировать нулем или конкретным значением. Это не C# где автоматом нули по умолчанию.
В С/С++ просто выделяется память под хранение указателя, а значением становится тот мусор, который остался с прошлого использования этой памяти.
29 окт 20, 15:29    [22222991]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

Dima T
Любые указатели надо инициализировать нулем или конкретным значением.

Я даже больше скажу: переменные любого типа надо инициализировать. Причём компилятор имеет
привычку предупреждать об использовании неинициализированных переменных, но кто ж эти
"многа букафф" читает?..

Posted via ActualForum NNTP Server 1.5

29 окт 20, 15:33    [22222996]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
Dima T
PetroNotC Sharp
Я заметил что в плюсах надо руками инициализировать поля указатели.
If (p) не работает из коробки.

Любые указатели надо инициализировать нулем или конкретным значением. Это не C# где автоматом нули по умолчанию.
В С/С++ просто выделяется память под хранение указателя, а значением становится тот мусор, который остался с прошлого использования этой памяти.

Да.
Добавил
public:
   void (*p) (std::string) = nullptr;

А жаль.
Чем продиктовано что не как в шарпе?
29 окт 20, 15:35    [22222997]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

PetroNotC Sharp
Чем продиктовано что не как в шарпе?

Шарп появился как "С++ для дебилов", а не наоборот.

Posted via ActualForum NNTP Server 1.5

29 окт 20, 15:38    [22222998]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
Dimitry Sibiryakov
PetroNotC Sharp
Чем продиктовано что не как в шарпе?

Шарп появился как "С++ для дебилов", а не наоборот.
))))))
29 окт 20, 15:40    [22223000]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
Dima T
Member

Откуда:
Сообщений: 15282
PetroNotC Sharp
Чем продиктовано что не как в шарпе?

Производительностью. Запись нулей - не всегда нужная операция, но процессорное время на нее надо будет тратить всегда.
29 окт 20, 15:43    [22223002]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
Dima T,
Ну, время наверно сопоставимо с инициализацией всего класса?
Я чисто про класс говорю.
Тем кому время критично наверно без классов работают.
29 окт 20, 15:48    [22223008]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51775

PetroNotC Sharp
Ну, время наверно сопоставимо с инициализацией всего класса?

Ты не поверишь, но у классов тоже нет инициализации кроме явной в конструкторах.

Posted via ActualForum NNTP Server 1.5

29 окт 20, 15:55    [22223015]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
Dima T
Member

Откуда:
Сообщений: 15282
PetroNotC Sharp
Dima T,
Ну, время наверно сопоставимо с инициализацией всего класса?
Я чисто про класс говорю.
Тем кому время критично наверно без классов работают.

Инициализация объекта - это присвоение явно прописанных значений полям, запуск конструкторов полей и выполнение конструктора класса. Если ничего перечисленного нет, то на инициализацию класса не тратится ни одного процессорного такта.

Вобщем если что-то явно не прописали - С/С++ считает это лишним.
29 окт 20, 15:55    [22223016]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
booby
Member

Откуда:
Сообщений: 2254
Dima T
PetroNotC Sharp
Чем продиктовано что не как в шарпе?

Производительностью. Запись нулей - не всегда нужная операция, но процессорное время на нее надо будет тратить всегда.


строго говоря да, "производительностью".

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

смысл происходящего заключается в создании объекта в частично сформированном состоянии.
Там где заполняют нулями принудительно, считают, что нам таких объектов не нать.
Там, где не заполняют - считают, что это правомерное состояние, а полное состояние сформируется позднее.
В этом смысле, чтение до записи, в языках сорта C, является обыкновенной ошибкой програмиста.
29 окт 20, 15:56    [22223017]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
booby,
Вы намекаете на анализ сего факта что если там мусор значит объект еще не родиля и на 6м месяце?
А как вы проверите что там мусор и объект не полностью готов?
29 окт 20, 16:43    [22223044]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
booby
Member

Откуда:
Сообщений: 2254
PetroNotC Sharp
booby,
Вы намекаете на анализ сего факта что если там мусор значит объект еще не родиля и на 6м месяце?
А как вы проверите что там мусор и объект не полностью готов?

хоть на 36-м.

Зачем нужен объект, и когда должен оказаться полностью сформированным - дело его создателя.

Проверять ничего не надо.

За готовность объекта к использованию на момент его фактического использования,
когда состояние должно оказаться полностью сформированным, никто, кроме создателя, ответственности не несет.
Это просто - хочешь "значения по умолчанию" - просто присвой его, имени себя, как создателя, конкретное умолчание,
путем совмещенния объявления подходящей по типу переменной с конструированием любимого, или потребного в конкретном месте, "умолчания".

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

Как правильные движения лыжного гонщика, велосипедиста или пловца.
Однажды усвоенные движения невозможно вытеснить.
При наступлении усталости новый навык "устаёт", и просыпается первоначальный.
Если ты на шарпах первый навык получал, и "немного устал сегодня", то пальцы твои автоматически начнут рассчитывать на дефолтные привоения.

Просто надо отдохнуть.
29 окт 20, 16:58    [22223060]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
booby,
А я думал что за полезный побочный эффект)))))
Короче, не расслабляйся)
29 окт 20, 17:09    [22223069]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
booby
Member

Откуда:
Сообщений: 2254
PetroNotC Sharp,

а что думаешь, легко было осваивать коньковый ход в лыжах тем, кто всю жизнь бегал классикой...

29 окт 20, 17:12    [22223071]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
PetroNotC Sharp
Member

Откуда:
Сообщений: 6525
booby,
Ну, инициализацию фигурными скобками же добавили)
29 окт 20, 17:23    [22223082]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
booby
Member

Откуда:
Сообщений: 2254
PetroNotC Sharp
booby,
Ну, инициализацию фигурными скобками же добавили)


это же ничего не меняет по смыслу.
ты как был бог, так им и остаёшься.
Что напишешь в эти скобки, так мир и окажется устроен.

В своих структурах/классах ты можешь рулить конструкторами по умолчанию, представляя себе разумное поведение,
формируя его полностью, или сознательно оставляя часть структуры, а значит - сам объект, в неполностью сформированном состоянии.
В последнем случае - ты либо кодом для "как проверять" это дело снабжаешь, или/и конструкторами,
позволяющими получить полностью сформированный объект.
29 окт 20, 17:42    [22223097]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно вызвать указатель на функцию с парам строкой?  [new]
Алексей Роза 2020
Member [заблокирован]

Откуда:
Сообщений: 247
Dimitry Sibiryakov
Я даже больше скажу: переменные любого типа надо инициализировать. Причём компилятор имеет привычку предупреждать об использовании неинициализированных переменных, но кто ж эти "многа букафф" читает?..

в C++ же конструкторы этим занимаются, которых не было в C.
И они же гарантируют, что не будет мусора.
Классы в C++ сделаны для увеличения автоматизма и уменьшения ошибок.
А вот так зачем в C++ писать непонятно:
PetroNotC Sharp
public:
   void (*p) (std::string) = nullptr;

это же "naked pointer", который "НЕЛЬЗЯ"
29 окт 20, 17:59    [22223103]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / C++ Ответить