ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.

22.09.2009, 21:31
|
|
Участник форума
Регистрация: 06.05.2008
Сообщений: 161
Провел на форуме: 1289087
Репутация:
59
|
|
Решаю задачу коммивояжера методом ветвей и границ. Нашел программу на паскале, переписал на си, вроде все правильно, но вываливает сегфолт на 146 строчки http://paste.org.ru/?asvtl7
Входной файл такой:
Код:
4
0 6 1 5
6 0 3 1
1 3 0 2
5 1 2 0
|
|
|

23.09.2009, 07:47
|
|
Участник форума
Регистрация: 31.03.2008
Сообщений: 143
Провел на форуме: 403124
Репутация:
95
|
|
POSITION pos = m_ctlList.GetFirstSelectedItemPosition();
if (pos == NULL)
m_ctlList.AddItem( _T("nItem"),_T("no item selected"));
else
{
while (pos)
{
int i=0;
//nItem=0;
nItem[i] = m_ctlList.GetNextSelectedItem(pos);
test.Format("%d",nItem[i]);
m_ctlList.AddItem( _T("nItem"),_T(test));
while(!eof(fh))
{
_read(fh,&mstruct,sizeof mstruct);
if(nItem[i]==2)
{
out<<ms.k<<'\n';
}
if(nItem[i]==3)
{
out1<<ms.m<<'\n';
}
}
i++;
}}
при выделении 2-го и 3-го элемента записывает только второй
если выделить нулевой или первый элемент и второй то не запишет ничего => почему-то запоминается номер только первого выделенного элемента а вторых какбы нет...
что я делаю нетак
|
|
|

23.09.2009, 12:44
|
|
Познающий
Регистрация: 07.08.2009
Сообщений: 91
Провел на форуме: 398965
Репутация:
51
|
|
я не вижу ответа, что тут некто не знает с++ ? не верю
|
|
|

23.09.2009, 13:00
|
|
Reservists Of Antichat - Level 6
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме: 18127311
Репутация:
1676
|
|
я не вижу ответа, что тут некто не знает с++ ? не верю
Ещё 10 раз напиши это и получишь неожиданный приз...
|
|
|

24.09.2009, 13:48
|
|
Reservists Of Antichat - Level 6
Регистрация: 23.08.2007
Сообщений: 1,237
Провел на форуме: 18127311
Репутация:
1676
|
|
Как выглядит программа на С++ которая выключает или перезагружает компьютер ?
Видимо так
int main()
{
system("shutdown -r");
return 0;
}
|
|
|

24.09.2009, 17:59
|
|
Участник форума
Регистрация: 26.04.2009
Сообщений: 146
Провел на форуме: 468682
Репутация:
68
|
|
Mitnick17,
в cmd набрать help
еще
%windir%/help/ntcmds.chm
|
|
|

24.09.2009, 18:10
|
|
Участник форума
Регистрация: 26.04.2009
Сообщений: 146
Провел на форуме: 468682
Репутация:
68
|
|
Mitnick17, а тебе, что нужно? "не встроенные программы", это программы, находящиеся в директориях которые прописаны в path(набрать в path в cmd).
>>%windir%/help/ntcmds.chm нужно в cmd набрать?
провести столь безабидный эксперемент быстрее, чем написать сообщение на форум, ответ - да.
а вообще, зря ты тут спросил, оффтопик какбе. тему бы создал новую лучше... хотя поздно уже 
|
|
|

24.09.2009, 20:40
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме: 233095
Репутация:
21
|
|
Вот столкнулся с такой проблемкой:
Мне нужно вычитать область памяти, адрес которой известен(hex). Сразу в голове построился процесс написания программы и что буду использовать. Сразу решил использовать указатели. Но вот проблема - при вводе в консоль адреса ячейки, которым нужно инициализировать указатель, чет не то происходит - адрес присваивается, но значение не вычитывается(то есть не правильное ).
1. В какой тип переменной можно записать hex, а потом его использовать для инициализации указателя?(с интом чаром чет не вышло)
2. Мне нужно вычитать к примеру 50 адресов, идущих после известного. Инкримент указателя для этого подойдет?
Смотрю, чет никто не отвечает. Вот к приведу пример как я делал:
Код:
void main()
{
int a = 19;
cout << "a = " << a << "\n&a = " << &a << endl;
}
это код в одной проге. Я ее запускаю и вижу адрес переменной а в памяти.
Далее я запускаю другую прогу, с кодом
Код:
void main()
{
int *a = (int*)0x0012FF60; //адрес переменной из 1-й проги
cout << "a = " << a << "\n*a = " << *a << endl;
}
Видно что адрес в указателе сменился, а вот доступиться к значению не могу по нормальному(((
А вообще нужно чтоб адрес был введен пользователем к примеру так:
Код:
char addr[10];
cin >> addr; // сюда вводится адрес из первой проги
char *mem = (char*) addr;
Подскажите плз, а то моск уже кипит от количеста перепробованных вариантов(((
Последний раз редактировалось horlyk; 25.09.2009 в 00:04..
|
|
|

25.09.2009, 00:02
|
|
Участник форума
Регистрация: 26.08.2009
Сообщений: 133
Провел на форуме: 193434
Репутация:
79
|
|
2horlyk
1. память я надеюсь своего процесса? Если нет то читать из чужого ReadProcessMemory MSDN
Если из своего, то просто по указателю. Чтото типа этого.
int foo;
int bar;
foo = 0xXXXXXXXX;
bar = *((int *)foo);
для foo можно использовать любой тип, главное чтобы он был 4-x байтным.
Если в следующий раз будет что-то не получатся - покажи код!
2. Да, но следи, чтобы указатель не вылетал за пределы выделенной памяти, а то схватишь access violation.
|
|
|

25.09.2009, 00:14
|
|
Участник форума
Регистрация: 02.12.2007
Сообщений: 132
Провел на форуме: 233095
Репутация:
21
|
|
Сообщение от Hiro Protagonist
2horlyk
1. память я надеюсь своего процесса? Если нет то читать из чужого ReadProcessMemory MSDN
Да, именно в другом процессе. Так то оно выходит. Можно плз пример использования той ф-и, что ты мне дал в ссылке, а то я чет там ниче не понял.
|
|
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|