Berkus
если данные не нужны то и free вызывать незачем
Anton
Чем-то похоже на iconv
Berkus
похоже на лютый сишный пиздец
Berkus
Berkus
NULL вряд ли куда-то утечет
Oleg
так если данные вренулись
Anton
Вот у iconv NULL таким веселым образом используется. Я почему и вспомнил In each series of calls to iconv(), the last should be one with inbuf or *inbuf equal to NULL, in order to flush out any partially converted input.
Oleg
https://bpaste.net/show/593628bf1022
Oleg
лучше я вам код покажу, вместо этой хрени
Berkus
char *params = NULL; const auto& url = m_OAuthWrapper->MakeSignedUrl(m_AccessToken, m_AccessTokenSecret, QUrl(urlString), &params, "POST"); твоя ошибка тут, ты смешал c и c++ апи в вызове функции
Oleg
вот я и спрашиваю
Oleg
как мне это красиво написать.
Oleg
Потому что у меня сишная либа
Berkus
спрячь params внутрь, а для вызова используй какой-то враппер, если хочешь params возвращать - они вообще нужны тебе СНАРУЖИ функции?
Oleg
да, там возвращается данные для oauth, которые я потом пихаю в реквест
Oleg
как вариант, можно возвращаться pair<url, params>. Но выглядит не сильно лучше.
Anton
Делай враппер, который будет владеть этой памятью и управляй ею. В любом случае дока говорит, что это твоя забота: both, the return value and (if given) 'postargs' need to be freed by the caller. Это к вопросу о париться с фри
Berkus
да, там возвращается данные для oauth, которые я потом пихаю в реквест
ну я бы сделал struct PostParams {} которая бы и следила бы за освобождением
Berkus
PostParams params; const auto& url = m_OAuthWrapper->MakeSignedUrl(m_AccessToken, m_AccessTokenSecret, QUrl(urlString), params, "POST");
Berkus
pair<> было бы неплохо если ты хочешь нормальный функциональный интерфейс
Berkus
в идеале, всё что сишная либа саллоцировала - скопировать в с++, оригиналы грохнуть
Berkus
Чтоб об malloc+delete случайно не убиться?
delete ты вряд ли сделаешь, PostParams же врапит, но вот раздербанить эту память можно легко например на map<string, string> для POST парамсов
Berkus
или там в json{} его затолкать
Oleg
буду pair возвращать
Oleg
а все сишное останется внутри враппера над либой
Berkus
ты главное не возвращай голый char** в паре, это здоровый такой footgun
Oleg
само собой
Oleg
я там QByteArray верну. Все, что будет создано в враппере - там и умрет.
Berkus
вполне
Alexey
А там точно нужно параметры возвращать.? Она же просто генерирует урл или что еще?
Alexey
https://bpaste.net/show/593628bf1022
Oleg
да, для поста - там oauth данные
Oleg
if 'postargs' is NULL a "GET" request is signed and the * signed URL is returned. Else this fn will modify 'postargs' * to point to memory that contains the signed POST-variables * and returns the base URL.
Cuno
http://www.boost.org/doc/libs/1_63_0/more/getting_started/windows.html#auto-linking Как это работает? Как вообще возможно через код управлять линкером?
Konstantin
pragma comment lib
Cuno
Жуть.
Cuno
Глупые свиньи, я бы сказал.
Cuno
При билде С++ проектов и так магии более чем достаточно.
Berkus
ну да, еще не хватает хедера полного ифдефов который линкует какие-то рандомные либы
Egor
этот их автолинк кастомные билды ломает
Berkus
ну его можно отключить
Berkus
там флажок же есть
Egor
вроде не помогало
Berkus
не туда засунул может
Egor
там макросы какие-то оставались после такого отключения, и они потом в других либах ошибки создавали
Egor
пустой файл в итоге работает хорошо)
Konstantin
я всегда вырубаю эти автолинкинги от греха подальше
Co(n)stantine👨‍🔬
O_o
Ostap ꑭ
Аххахахахахах
Co(n)stantine👨‍🔬
это реальный код где-то?
Co(n)stantine👨‍🔬
или вы его выдумали?
🦥Alex Fails
Это дизассемблированный пиздец. А про звездочки можно прочитать в гугле, забив запрос "указатели язык си"
Aidar
ну это какойто g36=arr[arr2[i] + arr3[j]] где arr arr2 arr3 могут быть не разными
Aidar
ниначем
Aidar
але
Aidar
декомпиляция невозможна
Aidar
там только какието эвристики
Aidar
этож не джава
Aidar
я знаю только hexrays decompiller может там эвристики получше
🦥Alex Fails
Этотможет быть выхлоп из ембеддеда, где фиксированные данные, или от NES, там как раз юзаются похожие адреса для управления. Да много вариантов есть. Телепаты в отпуске
Andrei
https://gallery.mailchimp.com/e93417593cbf4da3dba03d672/files/56f88a1c-4f16-426b-9b3a-7a5a40f4a89a/cpp17detail.pdf
Andrei
В ссылке выше в пункте про inline variables говорится, что статические константные члены нужно определять в отдельном cpp-файле. Это чувак ошибся говоря о константности или просто компиляторы всегда неявно делали const встроенными и не ругались на мультиплай дефинитион?
Aidar
ну возьми адрес на нее без storage
Aidar
сработает?
Andrei
в плане без сторэдж?
Aidar
я имел ввиду без штуки в цппшнике
Aidar
я не шарю
Aidar
а стоп
Aidar
там же internal linkage
Aidar
или нет
Andrei
там же internal linkage
похоже да. и чувак просто ошибся, что нужно отдельно статическую константу класса определять в .cpp
tdiff
Core guidelines: A class with any virtual function should not have a copy constructor or copy assignment operator (compiler-generated or handwritten). Мне вот интересно, тут все с этим согласны?
🦥Alex Fails
А почему, интересно, так
🦥Alex Fails
Что будет, если нарушить это
B
вас остановила С++ полиция, вы нарушаете
Alexander "SonnySlave"
а на слайсинг мы не можем нарваться случайно?