Вопросы и ответы по программированию.

Для тех, кто хочет сделать мир лучше.
Сообщение
Автор
Аватара пользователя
Foka
Сержант
Сержант
Сообщения: 61
Зарегистрирован: 18.05.2006
Откуда: Россия
Поблагодарили: 2 раза
Контактная информация:

#256 Сообщение 08.08.2012, 15:11

kinders666 писал(а):insane_hostage
Ты должен сдать хорошо ЕГЭ по требуемым предметам, русский, математику и (информатику или физику). Если ты поступил, то чисто теоретически твоих знаний должно хватить для начала. В ЕГЭ по информатике особых навыков в программировании не нужно, можно использоваться простейший Visual Basic
Whadda писал(а):
kinders666 писал(а): можно использоваться простейший Visual Basic
А по теме:
Во многих институтах/университетах базовый курс тоже даётся, но он даётся буквально за неделю, так что если ты чего-то не знаешь, то тебе это расскажут, но не за 11 лет как в школе, а за 1 неделю, а может даже меньше :)
Спасибо! Приму к сведению. Просто собираюсь сдавать физику кроме основных, но настораживает то, что в физике о программировании ни слова я не слышал

Аватара пользователя
kinders666
Модератор
Модератор
Сообщения: 4163
Зарегистрирован: 25.10.2006
Откуда: Москва
Благодарил (а): 537 раз
Поблагодарили: 191 раз

#257 Сообщение 08.08.2012, 15:12

insane_hostage
Нет, в физике нету программирования. В институтах, где принимают физику, в программе заложено то, что ты не имел дело с IT-технологиями, по-другому никак
Изображение
Изображение

Аватара пользователя
Whadda
Гаранты
Гаранты
Сообщения: 715
Зарегистрирован: 21.07.2012
Откуда: Perm', Russian Federation
Благодарил (а): 171 раз
Поблагодарили: 102 раза
Контактная информация:

#258 Сообщение 08.08.2012, 15:13

insane_hostage писал(а): Спасибо! Приму к сведению. Просто собираюсь сдавать физику кроме основных, но настораживает то, что в физике о программировании ни слова я не слышал
Физика для более технических специальностей, где работа идёт, в основном, с железом, информатика же для программистов ;)

Аватара пользователя
kinders666
Модератор
Модератор
Сообщения: 4163
Зарегистрирован: 25.10.2006
Откуда: Москва
Благодарил (а): 537 раз
Поблагодарили: 191 раз

#259 Сообщение 08.08.2012, 15:13

Whadda
Почему же, в Бауманке принимают лишь физику, к примеру
Изображение
Изображение

Аватара пользователя
Foka
Сержант
Сержант
Сообщения: 61
Зарегистрирован: 18.05.2006
Откуда: Россия
Поблагодарили: 2 раза
Контактная информация:

#260 Сообщение 08.08.2012, 15:14

kinders666 писал(а):insane_hostage
Нет, в физике нету программирования. В институтах, где принимают физику, в программе заложено то, что ты не имел дело с IT-технологиями, по-другому никак
Теперь понятно, спасибо.

Аватара пользователя
nikit-xxx
Лейтенант
Лейтенант
Сообщения: 208
Зарегистрирован: 28.11.2007
Благодарил (а): 44 раза
Поблагодарили: 5 раз

#261 Сообщение 13.08.2012, 13:08

Почему в цикле не генерируется исключение bad_alloc?
[syntax lang="cpp" lines="n"]
#include <iostream>
#include <exception>
#include <new> // чтобы получить доступ к исключению bad_alloc
using namespace std;

int main(){
int *p;

long long unsigned int j;

try{
for(j=0; 1; j++){
//throw 1;
p = new int[32];
}
}
catch(bad_alloc xa){
cout << "bad_alloc:\nj = " << j << endl;
}
catch (exception& e){
cerr << "exception caught: " << e.what() << endl;
}
catch(...){
cout << "Uncnown exception"<< endl;
}
return 0;
}
[/syntax]
Компилятор: mingw-gcc (GCC) 4.7.0
ОС: Win 7 Starter 32-bit
В консоле пишет:

Код: Выделить всё

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Помещение блоков try-catch во внутрь цикла успехом не увенчалось.
[syntax lang="cpp" lines="n"]#include <iostream>
#include <exception>
#include <new> // чтобы получить доступ к исключению bad_alloc
using namespace std;

int main(){
int *p;

long long unsigned int j;


for(j=0; 1; j++){
try{
p = new int[32];
}
catch(bad_alloc xa){
cout << "bad_alloc:\nj = " << j << endl;
break;
}
}

return 0;
}
[/syntax]

Хотя nothrow-версия работает..

и сишный код, решающий ту же задачу, работает
[syntax lang="c" lines="n"]#include <stdio.h>
#include <stdlib.h>

int main(void)
{
int *p;
long long unsigned int j;

for(j=0; 1; j++){
p = (int*)malloc(32 * sizeof(int));
if(p==0){
printf("Больше нельзя. j=%d\n", j);
break;
}
}
return(0);
}[/syntax]

Добавлено спустя 16 часов 34 минуты 40 секунд:
походу баг 4.7.0, т. к. в версии "gcc (TDM-2 mingw32) 4.4.1" исключение исправно генерится
Откуда иксы в моём нике
Изображение
Изображение
скачать С. Прата. Язык программирования C++. Лекции и упражнения. 5-е изд (*Выровнена нумерация страниц, *Содержание)
Краткая инструкция по созданию пиратки-распака CS/HL
Изображение
Использование тэга подсветки синтаксиса
[syntax lang="cpp" lines="n"]
#include <iostream>
using namespace std;

struct cl{
static void f() { cout << "Hi, user!\n"; }
int i;
};

int main()
{
cl::f();
//cl::i = 1;
return 0;
}
[/syntax]

Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#262 Сообщение 13.08.2012, 13:33

nikit-xxx
А попробуй так:
[syntax lang="cpp" lines="n"]
#include <iostream>
#include <exception>
#include <new> // чтобы получить доступ к исключению bad_alloc
using namespace std;

int main(){
int *p;

long long unsigned int j;

try{
for(j=0; 1; j++){
//throw 1;
p = new int[32];
}
}
catch(bad_alloc& xa){
cout << "bad_alloc:\nj = " << j << endl;
}
catch (exception& e){
cerr << "exception caught: " << e.what() << endl;
}
catch(...){
cout << "Uncnown exception"<< endl;
}
return 0;
}
[/syntax]
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

Аватара пользователя
nikit-xxx
Лейтенант
Лейтенант
Сообщения: 208
Зарегистрирован: 28.11.2007
Благодарил (а): 44 раза
Поблагодарили: 5 раз

#263 Сообщение 13.08.2012, 19:13

Попробовал, не помогло, дело было не в ссылке.
Откуда иксы в моём нике
Изображение
Изображение
скачать С. Прата. Язык программирования C++. Лекции и упражнения. 5-е изд (*Выровнена нумерация страниц, *Содержание)
Краткая инструкция по созданию пиратки-распака CS/HL
Изображение
Использование тэга подсветки синтаксиса
[syntax lang="cpp" lines="n"]
#include <iostream>
using namespace std;

struct cl{
static void f() { cout << "Hi, user!\n"; }
int i;
};

int main()
{
cl::f();
//cl::i = 1;
return 0;
}
[/syntax]

Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#264 Сообщение 13.08.2012, 19:24

nikit-xxx
У меня тоже не работало, а потом размер массива j указал больше. И всё стало работать нормально.
Понятия не имею, с чем связано такое поведение, в плюсах не силён.
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

Аватара пользователя
nikit-xxx
Лейтенант
Лейтенант
Сообщения: 208
Зарегистрирован: 28.11.2007
Благодарил (а): 44 раза
Поблагодарили: 5 раз

#265 Сообщение 13.08.2012, 19:37

а потом размер массива j указал больше. И всё стало работать нормально.
честно говоря не понял..
j - это не размер массива, а счётчик, сколько 32-элементных int-массивов удалось выделить. Прога в цикле тупо забирает память; с каждой итерацией к ук-лю p присваивается адрес новой обл-ти памяти(тобишь утечка)... И делается это с целью получить bad_excetion.

Возможно ты имел в виду нечто вроде этого
[syntax lang="cpp" lines="n"]#include <iostream>
#include <new>
using namespace std;

int main () {
try
{
int* myarray= new int[100000000000000000];
}
catch (bad_alloc& ba)
{
cerr << "bad_alloc caught: " << ba.what() << endl;
}
return 0;[/syntax]
Откуда иксы в моём нике
Изображение
Изображение
скачать С. Прата. Язык программирования C++. Лекции и упражнения. 5-е изд (*Выровнена нумерация страниц, *Содержание)
Краткая инструкция по созданию пиратки-распака CS/HL
Изображение
Использование тэга подсветки синтаксиса
[syntax lang="cpp" lines="n"]
#include <iostream>
using namespace std;

struct cl{
static void f() { cout << "Hi, user!\n"; }
int i;
};

int main()
{
cl::f();
//cl::i = 1;
return 0;
}
[/syntax]

Аватара пользователя
NiGHt-LEshiY
Полковник
Полковник
Сообщения: 10258
Зарегистрирован: 13.06.2008
Откуда: Россия
Благодарил (а): 752 раза
Поблагодарили: 2667 раз
Контактная информация:

#266 Сообщение 13.08.2012, 19:44

nikit-xxx
Бррр, да, именно это имел в виду. Понятия не имею, почему написал про какой-то j.
Если мне не изменяет память, метод выделения маленьких блоков и больших блоков разный, соответственно, один из них может генерировать исключение, а другой нет. Неплохо бы ещё проверять, не вернул ли оператор new NULL.
Но это только мысли, опять же. Не плюсовик я %)
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.

MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#267 Сообщение 13.08.2012, 22:35

nikit-xxx
Для аллокации bad_alloc тоже нужна память ;)

Пробуй забивать объектами побольше, а не интами.

Если детальнее, то проблема в том, что памяти нехватает даже на то, что-бы выделить инт, а ты хочеш ещё и выделять bad_alloc (он больше или равен инту?).

Аватара пользователя
nikit-xxx
Лейтенант
Лейтенант
Сообщения: 208
Зарегистрирован: 28.11.2007
Благодарил (а): 44 раза
Поблагодарили: 5 раз

#268 Сообщение 13.08.2012, 23:27

MOZGIII
int и bad_alloc по 4 байта

памяти нехватает даже не то, что-бы выделить инт, а ты хочеш ещё и выделять bad_alloc

но у меня память выделяется массивами int[32], размеры которых 128 байт


long long int сгенерировало..

вот они какие объекты..
Откуда иксы в моём нике
Изображение
Изображение
скачать С. Прата. Язык программирования C++. Лекции и упражнения. 5-е изд (*Выровнена нумерация страниц, *Содержание)
Краткая инструкция по созданию пиратки-распака CS/HL
Изображение
Использование тэга подсветки синтаксиса
[syntax lang="cpp" lines="n"]
#include <iostream>
using namespace std;

struct cl{
static void f() { cout << "Hi, user!\n"; }
int i;
};

int main()
{
cl::f();
//cl::i = 1;
return 0;
}
[/syntax]

MOZGIII
Разработчик
Разработчик
Сообщения: 910
Зарегистрирован: 09.01.2009
Откуда: Переезжаю в /dev/null
Благодарил (а): 7 раз
Поблагодарили: 65 раз
Контактная информация:

#269 Сообщение 14.08.2012, 01:31

nikit-xxx
Ну так %) Всё просто ведь.

Что-бы узнать наверняка, нужно читать код gcc или смотреть ассемблерный листинг скомпиленного кода. Также можно почитать исходники аллокатора (но не в windows, там исходников нет).

Аватара пользователя
nikit-xxx
Лейтенант
Лейтенант
Сообщения: 208
Зарегистрирован: 28.11.2007
Благодарил (а): 44 раза
Поблагодарили: 5 раз

#270 Сообщение 02.09.2012, 23:43

ос. win xp 32-bit, gdb 7.4
Нужно получить последовательность вызова функций в c++-программе(есть исходники, компилируются g++ с ключом -g), вперемешку с её выводом, как при команде (gdb) step.
Проблема в том, что step<ENTER> step<ENTER> step<ENTER> != step 3, а именно: если записать step 3, то отладчик не выводит строки исходника. Как заставить его выводить исходник?
Есть что-либо умнее, чем записать последовательно step<ENTER> step<ENTER> step<ENTER> ?
Вот что выводит
E:\Programming\Examples 5\cpp20>gdb t.7.exe -x t.7.gdb.txt
тут отказ от гарантий
Reading symbols from E:\Programming\Examples 5\cpp20\t.7.exe...done.
Breakpoint 1 at 0x4013c5: file t.7.1-extern-instead-header.cpp, line 11.
Breakpoint 2 at 0x40145a: file t.7.1-extern-instead-header.cpp, line 21.
[New Thread 1196.0x7c]

Breakpoint 1, main (argc=1, argv=0x3e2610)
at t.7.1-extern-instead-header.cpp:11
11 {
E:\Programming\Examples 5\cpp20\t.7.exe
4.1: k=14

88

Breakpoint 2, _fu1___ZSt4cout () at t.7.1-extern-instead-header.cpp:21
21 return 0;

(gdb)
А вот что хотелось
E:\Programming\Examples 5\cpp20>gdb t.7.exe -x t.7.gdb.txt
тут отказ от гарантий
Reading symbols from E:\Programming\Examples 5\cpp20\t.7.exe...done.
Breakpoint 1 at 0x4013c5: file t.7.1-extern-instead-header.cpp, line 11.
Breakpoint 2 at 0x40145a: file t.7.1-extern-instead-header.cpp, line 21.
[New Thread 3368.0x600]

Breakpoint 1, main (argc=1, argv=0x3e2610)
at t.7.1-extern-instead-header.cpp:11
11 {
(gdb) s
12 for(register int i = 0; i < argc; ++i)
(gdb)
13 cout << argv << endl;
(gdb)
E:\Programming\Examples 5\cpp20\t.7.exe
12 for(register int i = 0; i < argc; ++i)
(gdb)
16 cout << "4.1: k=" << k << endl << endl;
(gdb)
4.1: k=14

19 f();
(gdb)
f () at t.7.2-extern-instead-header.cpp:11
11 cout << k << endl;
(gdb)
88
12 }
(gdb)

Breakpoint 2, _fu1___ZSt4cout () at t.7.1-extern-instead-header.cpp:21
21 return 0;

(gdb)

t.7.gdb.adv.bat
gdb t.7.exe -x t.7.gdb.txt
t.7.gdb.txt
break main
break 21
run
#step 100

t.7.1-extern-instead-header.cpp
#include <iostream>
using namespace std;

//void f();
extern void f(); // как видим, слово extern необязательно, но добавляет стиля

int k = 14;
static int i;

int main(int argc, char **argv)
{
for(register int i = 0; i < argc; ++i)
cout << argv << endl;


cout << "4.1: k=" << k << endl << endl;

//cout << "calling f() from 4.2:\n";
f();

return 0;
}
t.7.2-extern-instead-header.cpp
namespace{
int k = 88;
}

static int i;

#include <iostream>
using namespace std;

void f(){
cout << k << endl;
}

P. S. Просто взял первые попавшиеся исходники.
Компилировались с ключом -g

Добавлено спустя 3 минуты:
P. P. S. С backtrace не так всё хорошо, как в руководствах, она выводит только одну строчку, bt N, bt -N тоже.
Скрытый текст
Breakpoint 1 at 0x4013c5: file t.7.1-extern-instead-header.cpp, line 11.
Breakpoint 2 at 0x40145a: file t.7.1-extern-instead-header.cpp, line 21.
[New Thread 3904.0xce8]

Breakpoint 1, main (argc=1, argv=0x3e2610)
at t.7.1-extern-instead-header.cpp:11
11 {
(gdb) c
Continuing.
E:\Programming\Examples 5\cpp20\t.7.exe
4.1: k=14

88

Breakpoint 2, _fu1___ZSt4cout () at t.7.1-extern-instead-header.cpp:21
21 return 0;
(gdb) backtrace
#0 _fu1___ZSt4cout () at t.7.1-extern-instead-header.cpp:21
(gdb)


Update:
проблему решил с пом-ю bat и "костыля"
bat
PATH=%PATH%;C:\MinGW\bin\
(gdb.exe t.4.exe) | (file_echo.exe log.txt)
pause
костыль file_echo.exe [syntax lang="cpp" lines="n"]#include <cstdio>
int main(const int argc, const char **argv)
{
FILE *fp;
char const *fnamep = argv[1];
char c;

if(argc==2){
if( !( fp=fopen(fnamep, "w") ) ){
printf("Не удалось открыть файл %s для записи.\n", fnamep);
return 1;
}

while((c=getchar())!=EOF) {
putchar(c);
putc(c, fp);
}
fclose(fp);
}else{
while((c=getchar())!=EOF) {
putchar(c);
}
}

return 0;
}[/syntax]
Откуда иксы в моём нике
Изображение
Изображение
скачать С. Прата. Язык программирования C++. Лекции и упражнения. 5-е изд (*Выровнена нумерация страниц, *Содержание)
Краткая инструкция по созданию пиратки-распака CS/HL
Изображение
Использование тэга подсветки синтаксиса
[syntax lang="cpp" lines="n"]
#include <iostream>
using namespace std;

struct cl{
static void f() { cout << "Hi, user!\n"; }
int i;
};

int main()
{
cl::f();
//cl::i = 1;
return 0;
}
[/syntax]

Ответить Вложения 1