C++ (что-то я намудрил)
Модератор: Модераторы разделов
-
- Сообщения: 262
C++
Собственно есть данный код .
Все бы хорошо но он странным оброзом крошится на Gnu/Linux
На OpenBSD никаких проблем с ним нету
крошится он на месте
if(p_root->next !=NULL)
Помогите советом- из за чего может быть (((
при ./a.out 2 2 крошится
при ./a.out 10 10 все нормально
Все бы хорошо но он странным оброзом крошится на Gnu/Linux
На OpenBSD никаких проблем с ним нету
крошится он на месте
if(p_root->next !=NULL)
Помогите советом- из за чего может быть (((
при ./a.out 2 2 крошится
при ./a.out 10 10 все нормально
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
- Сообщения: 482
Re: C++
В первом приближении - треба бы так, наверна
:

Код: Выделить всё
if (p_root && p_root->next) {
// p_root может быть и нуликом :)
}
Пойдём на рыбалку !
-
- Сообщения: 262
Re: C++
Женя Подсыпальников писал(а): ↑17.12.2008 18:50В первом приближении - треба бы так, наверна:
Код: Выделить всё
if (p_root && p_root->next) { // p_root может быть и нуликом :) }
данный код не помого)) но ошибку нашёл )))
просто в коде есть строчки
Код: Выделить всё
tmp->next=new P;
tmp=tmp->next;
надо было сделать так
Код: Выделить всё
tmp->next=new P;
tmp=tmp->next;
tmp->next=NULL;
Спасибо за наводку)))
иногда самого простого и не замечаешь))
-
- Сообщения: 482
Re: C++
Угу 
Вообще то
за инициализацию полей -
должен бы нести ответственность конструктор некоторого класса ли структуры,
а не Всевышний, как ты правильно заметил

Вообще то
за инициализацию полей -
должен бы нести ответственность конструктор некоторого класса ли структуры,
а не Всевышний, как ты правильно заметил

Пойдём на рыбалку !
-
- Сообщения: 585
- Статус: Программист С++
- ОС: Debian GNU/Linux
Re: C++
Хм... В названии темы фигурирует С++, да и файл с расширением .cpp, а тем временем внтури - чистейший С... Вы уж определитесь, уважаемый alfss, с каким языком работаете.
P.S. Не могу удержаться... Уважаемый alfss! Совет: не создавайте программы, написанные таким стилем. Я понимаю, старая Unix-школа С-программистов останется в нашей памяти ещё надолго, но поверьте, что если код, написанный так, достанется на сопровождение стороннему программисту, он не раз воспомянет автора недобрыми словами...
P.S. Не могу удержаться... Уважаемый alfss! Совет: не создавайте программы, написанные таким стилем. Я понимаю, старая Unix-школа С-программистов останется в нашей памяти ещё надолго, но поверьте, что если код, написанный так, достанется на сопровождение стороннему программисту, он не раз воспомянет автора недобрыми словами...
-
- Сообщения: 262
Re: C++
a) это C++ ибо есть функция new и компилировать приходится g++
б) я не вижу смысла тут использовать классы или еще что свойственное С++
в) там нету ничего сложного для понимания
Если у вас имеется какая либо критика по коду(точнее по оформлению его) - я с радостью её выслушаю и сделаю для себя выводы.
б) я не вижу смысла тут использовать классы или еще что свойственное С++
в) там нету ничего сложного для понимания
Если у вас имеется какая либо критика по коду(точнее по оформлению его) - я с радостью её выслушаю и сделаю для себя выводы.
-
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: C++
три вопроса:
1) Если С++, то почему используете printf() вместо cout?
2) Почему не освобождаете память???
3) Почему не использовать С вместо С++, имхо, от С++ у вас там только оператор new; замените лучше его на malloc().
P.S. полностью солидарен с deninok.
1) Если С++, то почему используете printf() вместо cout?
2) Почему не освобождаете память???
3) Почему не использовать С вместо С++, имхо, от С++ у вас там только оператор new; замените лучше его на malloc().
P.S. полностью солидарен с deninok.
-
- Сообщения: 262
Re: C++
1) мне удобно использовать printf() - и C++ это не запрещает
2) после завершения программы будет очищаться память ,а продолжение выполнения её не требуется
3)new по моему легче использовать чем malloc- это моё ИМХО
2) после завершения программы будет очищаться память ,а продолжение выполнения её не требуется
3)new по моему легче использовать чем malloc- это моё ИМХО
-
- Сообщения: 585
- Статус: Программист С++
- ОС: Debian GNU/Linux
Re: C++
(alfss) писал(а):1) мне удобно использовать printf() - и C++ это не запрещает
Хм... Странно, очень странно. С тех пор как я начал использовать cout, функция printf() кажется мне весьма и весьма ограниченной. Да и не вписывается она в концепции, поддерживаемые С++...
(alfss) писал(а):2) после завершения программы будет очищаться память ,а продолжение выполнения её не требуется
Если вы вручную выделили память, то должны вручную же её и удалить. Должны! Это аксиома, пренебрежение которой может дорого обойтись...
(alfss) писал(а):3)new по моему легче использовать чем malloc- это моё ИМХО
Разумеется, легче! Но, если вы это понимаете, тогда мне вообще непонятна ваша любовь к printf() - ведь использовать cout объективно легче...
(alfss) писал(а):Если у вас имеется какая либо критика по коду(точнее по оформлению его) - я с радостью её выслушаю и сделаю для себя выводы.
Да, критика имеется.

Во-первых, откуда у вас такая жуткая ненависть к пробелам? Иным, как ненавистью, объяснить почти полное их отсутствие я не могу. Да, в этом коде можно разобраться, но с пробелами сделать это было бы куда проще.
А во-вторых, несмотря на наличие new, ваш код - чистой воды С. Ведь вы используете С-шную (и к тому же устаревшую) манеру работы с переменными. Ну скажите мне, зачем заводить переменную i где-то в начале main(), чтобы потом использовать её в циклах да ещё и в условных конструкциях? Неужели не проще будет заводить переменную счёта внутри каждой конструкции for? А название tmp - это вообще особый кадр. tmp - это (в вашем случае) временный указатель. Но называть переменную tmp - это значить не назвать её вовсе, ибо это название ровным счётом ничего не говорит о её предназначении (ведь по сути своей все переменные в программе являются временными, различается лишь время их жизни).
-
- Сообщения: 482
-
- Сообщения: 262
Re: C++
deninok писал(а): ↑22.12.2008 11:13(alfss) писал(а):1) мне удобно использовать printf() - и C++ это не запрещает
Хм... Странно, очень странно. С тех пор как я начал использовать cout, функция printf() кажется мне весьма и весьма ограниченной. Да и не вписывается она в концепции, поддерживаемые С++...
(alfss) писал(а):2) после завершения программы будет очищаться память ,а продолжение выполнения её не требуется
Если вы вручную выделили память, то должны вручную же её и удалить. Должны! Это аксиома, пренебрежение которой может дорого обойтись...
(alfss) писал(а):3)new по моему легче использовать чем malloc- это моё ИМХО
Разумеется, легче! Но, если вы это понимаете, тогда мне вообще непонятна ваша любовь к printf() - ведь использовать cout объективно легче...
(alfss) писал(а):Если у вас имеется какая либо критика по коду(точнее по оформлению его) - я с радостью её выслушаю и сделаю для себя выводы.
Да, критика имеется.
Во-первых, откуда у вас такая жуткая ненависть к пробелам? Иным, как ненавистью, объяснить почти полное их отсутствие я не могу. Да, в этом коде можно разобраться, но с пробелами сделать это было бы куда проще.
А во-вторых, несмотря на наличие new, ваш код - чистой воды С. Ведь вы используете С-шную (и к тому же устаревшую) манеру работы с переменными. Ну скажите мне, зачем заводить переменную i где-то в начале main(), чтобы потом использовать её в циклах да ещё и в условных конструкциях? Неужели не проще будет заводить переменную счёта внутри каждой конструкции for? А название tmp - это вообще особый кадр. tmp - это (в вашем случае) временный указатель. Но называть переменную tmp - это значить не назвать её вовсе, ибо это название ровным счётом ничего не говорит о её предназначении (ведь по сути своей все переменные в программе являются временными, различается лишь время их жизни).
насчет очистки памяти- да я понимаю что стоит очищать то что было выделено в ручную,но в данном случае я считаю это не нужным.
printf()- привычка))),я автоматом набираю printf().
насчет пробелом-можно поконкретнее.
-
- Сообщения: 1341
- ОС: Arch Linux amd64
Re: C++
приучайте себя чистить память, как сейчас помню один раз меня подвело такое легкомыслие - написал довольно большую программу (около 5тыс.строк), так вот, там была утечка, и искал я ее очень-очень долго и мучительно.
printf() мне тоже очень нравится за удобное(и самое главное - компактное) на мой взгляд форматирование(правда, если не грамотно им пользоваться - программа становится уязвимой).
насчет пробелов:
Код: Выделить всё
#include <stdio.h>
#include <stdlib.h>
struct P {
int a;
int n;
struct P *next;
};
int get_random(void){
FILE* fd;
char c;
fd=fopen( "/dev/urandom", "r" );
fread(&c, sizeof(c), 1, fd);
fclose( fd );
return (int)c;
}
сравните со своим кодом =)
-
- Сообщения: 585
- Статус: Программист С++
- ОС: Debian GNU/Linux
Re: C++
Пробелы, пробелы и ещё раз пробелы. Придерживайтесь принципа: "пробелы - как то масло, которым кашу не испортишь".
-
- Сообщения: 296
- ОС: fedora, mandriva
Re: C++
(deninok) писал(а):Ну скажите мне, зачем заводить переменную i где-то в начале main(), чтобы потом использовать её в циклах да ещё и в условных конструкциях? Неужели не проще будет заводить переменную счёта внутри каждой конструкции for?
можно локализовать for в блоке, если это необходимо
а с добавлением возможности появилась необходимость мотать к началу main чтобы смотреть не объявлена ли там i для чего-нибудь, и многие ошибки имеют такую структуру сегодня, с C это не связано, например берётся кусок программы какой-нибудь а там i используется для чего-нибудь, и есть например продолжение программы в уже готовом виде с такими новыми циклами, и чего ? и чего, я вынужден заменять переменную i на другую ? а мне это неудобно, а у меня 100 строк с i и чего ? а убрать как-нибудь я могу из циклов объявление i ? да, могу, это хорошо, а то если бы сделали что не могу, то язык начинает управлять как мне писать и что мне делать, ну а в итоге что ?
что получается в итоге ? всё новое это хорошо забытое старое, и к чему тогда нововведения
-
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: C++
в какой-то понравившейся мне книжке я прочитал, что "пробел - лучший комментарий". Одними только пробелами и отступам можно сделать программу понятной и читаемой, а можно безнадёжно запутать...
что касается printf() - я сам не люблю cout
но вот освобождать память нужно обязательно!!! я уже писал здесь, что программист обязан убирать какашки за своим детищем, что-бы не получались глюкодромы вроде win
