Мне нужно удалить некоторые элементы из QList. Для ненужных элементов я создаю итераторы и помещаю их в отдельный контейнер removing
// цикл для 'list'
QList::iterator it = list.begin() + j;
removing.append(it);
// конец цикла для 'list'
...
while(removing.empty() == false)
{
list.erase(removing.takeFirst());
}
В результате получается, когда в контейнере removing больше одного элемента, то первый элемент удаляется нормально, а на удалении второго возникает SEGMENTATION FAULT.
При этом в отладчике QtCreator'а я вижу, что адреса в списке list не изменяются даже после удаления из середины list'а.
UPD Оказалось, для QList'а не гарантируется корректность итераторов при модификации контейнера: Краткое описание QLinkedList :
(Iterators pointing to an item in a QLinkedList remain valid as long as the item exists, whereas iterators to a QList can become invalid after any insertion or removal.)
. Решил путём замены QList на QLinkedList. Правда, это вызывало несколько неудобств - в частности, пришлось переходить на итераторы для обхода списка, но зато работает.
Ответ
При удалении элементов как-то делал так:
Проходил по списку1 и собирал индексы в список2
Проходил по списку2 с последнего элемента по первый (реверсированный список) и удалял из списка1 по индексам
Элементы удалялись без проблем
Собственно вопрос: удавалось ли кому-то (как-то) вытащить из камеры на Андроид-девайсе картинку в RAW? Много гуглил, но как-то бесполезно. Пишут, что нельзя, хотя коллбеки для этого есть (которые null возвращают). Но быть может есть способ?
Ответ
Для тех кому интересно. Мысли такие.
Вообщем, ситуация такая: самой ОС отдача RAW-картинки предусмотрена в коллбеке, а вот вендоры такую возможность для камер смартфонов не предусматривают. Это сделано специально, так как:
смартфон - не фотоаппарат и нефиг
Raw кушает очень много памяти, а ее обычно и так немного
Есть еще превью-коллбек, в котором тоже крутится якобы raw и можно попробовать вытащить его оттуда, но чую там также не все так просто. Да и задача была делать фотку в raw.
Мне нужно уменьшить загруженную картинку и сохранить её уменьшенной, но когда я уменьшаю и ставлю качество 60, как и в фотошопе, то картинка весит меньше в 2 раза чем сохранённая с таким же качеством в фотошопе и качество хуже. Попробовал поставить качество повыше, чтобы сравнять размер картинки с размером сохранённой картинки в фотошопе, то всёравно качество было намного хуже. Может ни те функции использую? Или может какие-то фильтры надо применить? Вот функция, с помощью которой уменьшаю и сохраняю изображение:
function imageresize($outfile,$infile,$neww,$newh,$quality) { $im=imagecreatefromjpeg($infile);
$im1=imagecreatetruecolor($neww,$newh);
imagecopyresampled($im1,$im,0,0,0,0,$neww,$newh,imagesx($im),imagesy($im)); imagejpeg($im1,$outfile,$quality);
imagedestroy($im);
imagedestroy($im1);
}
Подскажите, возможно ли сделать качество как в фотошопе, не в ущерб размеру изображения?
Или может как-то можно автоматически заставить фотошоп изменять изображения и сохранять их?
Ответ
Не получится сохранить картинку "так же хорошо как в Photoshop" с использованием PHP, если не реализовать алгоритм сохранения из Photoshop на PHP (что было бы неоправданно сложной задачей). Для улучшения соотношения вес/качество попробуйте использовать ImageMagick.
Как мне видится, диапазон генерируемых чисел будет [1,11] не так ли!? (Наткнулся на сайте Microsoft)
// Display 10 random integers in the range [ 1,10 ].
for( i = 0; i < 10;i++ )
{
err = rand_s( &number );
if (err != 0)
{
printf_s("The rand_s function failed! ");
}
printf_s( " %u ", (unsigned int) ((double)number /
(double) UINT_MAX * 10.0) + 1);
}
Ответ
Строго говоря, [1, 11]. Хотя 11 будет выходить только когда number==UINT_MAX, что будет происходить очень редко.
Довольно плотно занимаюсь разработкой сайтов на WordPress. CMS мне нравится, но сказать что в ней нет недостатков я не могу. Поскольку это opensource проект, то мне хотелось бы помочь исправить те недостатки которые я вижу. Собственно вопрос - что для этого нужно сделать? На каком сайте нужно писать исправленные фрагменты кода, и вообще интересно как происходит весь этот процесс.
Ответ
ответ на основании комментариев к вопросу: здесь следует создавать новые (и искать существующие) сообщения об ошибках. инструкция о том, как можно помочь проекту, находится здесь
Здравствуйте. Стоит Ubuntu 13.04+Windows 8. Есть раздел жесткого диска W: и он играет роль хранилища для Apache.
В Ubuntu он монтируется в /var/www, а в Windows просто W: и все настроено на него. Я себе так сделал, чтоб можно было под разными осями кодить без переносов файлов, да и просто очень удобно - типа рабочий диск.
Проблема в том, что Ubuntu при монтировании удаляет букву и под виндой приходится постоянно вручную назначать. Причем Ubuntu затирает букву, даже когда я в нее не захожу - наверно еще на этапе grub.
Кто-нибудь знает как кодом (С/С++/С#, Java, DOS .bat и т.д.) написать скрипт/программу под винду, чтоб можно было добавить в автозапуск и он при входе автоматически монтировался.
Ответ
Здравствуй, не предоставлю полного решения, но возможно подтолку вас в правильном направлении. Прочитав вашу задачу думаю вам нужно испортировать функции из kernel32.dll. Насколько я понял, вам может подойти SetVolumeMountPoint метод.
SetVolumeMountPoint - w32api - Справочник по Windows API
Попробуйте. Посмотрите так же C# how to mount and unmount a virtual drive. Не совмем то, но что бы понять принцип.
Доброго времени суток, у меня стоит интересная задачка в ходе корой мне необходимо менять пароль пользователя в ходе выполнения скрипта. Из всего что я знаю о фряхе я остановился на команде passwd, но так как она получает пароль только при вводе, пытался вызвать ее через popen и в поток забить новый пасс, но увы ничего не удалось...
P.S. по факту мне нужно создать пользователя, но команда pw не принимает пароль, насколько я понял. и связи с этим приходится искать решение выше указанного геморроя
Ответ
Думаю, man 3 forkpty это то, что Вам нужно. Там через псевдотерминал (pty) надо работать. В принципе, не очень сложно написать некий двунаправленный аналог popen() на псевдотерминале вместо pipe. Например, expect делает так в spawn Например, можно почитать здесь. Или покороче здесь. Идея в том, что Вы делаете псевдотерминал (это как бы связка из двух устройств -- master и slave (ведет себя аналогично обычному tty)), делаете fork и там dup дескрипторов 0,1,2 на slave, после exec passwd она считает, что работает с терминалом. Родительский процесс обменивается байтиками по master
ответ составлен из комментариев, написанных avp к вопросу.
Я правильно понял, что если я запишу:
try {
char * str = new char[30];
throw "exception";
delete [] str;
} catch(...) {
//здесь ничего не будем делать
}
то произойдет утечка памяти? А если запишу без delete, то утечки памяти не будет?
Также меня интересует, что если исключения произойдет по условию, то как быть с удалением, или же память удалит С++ сам?
Если я не буду возбуждать исключения, то НЕ будет утечки? Например:
try {
char * str = new char[30];
//кое-что делаем, но исключения не возбуждаем.
delete [] str;
} catch(...) {
//ничего не делам
}
И в каких случаях память нужно удалять память в catch?
Ответ
char *str = nullptr;
try {
str = new char[30];
throw "exception";
delete [] str;
} catch(...) {
delete [] str;
}
По Стандарту, применение оператора delete к указателю на уже очищенную память игнорируется. В C++ блока finally нет, потому можно сделать так. Или обернуть строку умным указателем, который в деструкторе автоматически дернет delete.
ЗЫ Но вообще, советуют правильно, если это С++, то нужно по возможности пользоваться классами стандартной библиотеки в общем и std::string в частности.
Есть система, на которой установлено множество пакетов и произведено множество настроек. Как создать iso образ этой системы сохраняя все настройки? Пробовал remastersys, но никак не могу установить ее ни с репозиториев, ни с исходников. Вариант подобный "Suse Studio" для Ubuntu тоже рассматривается UPD: Для решения задачи подошла программа "relinux"
Ответ
Для клонирования Linux системы можно воспользоваться средствами MondoRescue. Они позволяют сохранить работающую систему на диск и восстановить систему с диска.
Добрый вечер!
На досуге занимаюсь разработкой собственного сайта и возникли трудности в создании off-canvas меню. Структура страницы состоит из трёх блоков - "шапка", меню и содержимое.
Изначально меню видно. Ширина меню составляет 20% от ширины контейнера, ширина блока с содержимым - 80%.
Упрощённо, задача заключается в том, что при нажатии на кнопку "Меню", меню плавно смещается за край контейнера. В свою очередь блок содержимого плавно растягивается до 100% от ширины контейнера.
При повторном нажатии на кнопку "Меню", слева плавно выходит меню, которое занимает 20% от ширины контейнера. В свою очередь ширина блока с содержимым плавно уменьшается до 80%. Именно уменьшается, а не частично смещается за край контейнера. (именно это заставило писать своё решение).
Схематически это выглядит так:
Появление/исчезновение меню я достиг за счёт css свойства "transform: translate3d(-100%, 0, 0)". Проблема в том, что при смещении меню за край контейнера, блок содержимого хоть и растягивается до 100%, но "падает" вниз из за нехватки места. Понимаю, что за меню остались те самые 20% от ширины контейнера.
Как быть?
Буду очень Вам благодарен за помощь!
Код:
HTML: