...и снова непонятно. :( (Указатели на символьный массив)

Модератор: Модераторы разделов

agreed
Сообщения: 143
ОС: Fedora 10, Mac OS X 10.5

...и снова непонятно. :(

Сообщение agreed »

Все никак не могу до конца понять работу с указателем на символьный массив. Вот например:

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

void parse_name(char *txt, char *dest, name_forms nform)
{
    char *tdest = dest;
    int cur_form = 0;
    tdest = strtok(txt, ";");
    if ( nform == name1 ) return;
    for (; cur_form < nform; ++cur_form )
    tdest = strtok(NULL, ";");
}

Вызываю:
char a[]="aaa;bbb;ccc;ddd;eee;fff;ggg";
char b[MAX_BUF_SIZE];
parse_name(a,b,6);

Почему же она не работает? :(
Спасибо сказали:
Аватара пользователя
Jan2ary
Бывший модератор
Сообщения: 630
Статус: Тщедушный очкарик

Re: ...и снова непонятно. :(

Сообщение Jan2ary »

Пожалуйста, прочтите "Как правильно задавать вопросы" в начале данного раздела форума, затем переформулируйте вопрос.
Заголовок темы отредактировал.
Не шалю, никого не трогаю, починяю примус...
Спасибо сказали:
Аватара пользователя
aLexx programmer
Сообщения: 985
Статус: Турук-Макто
ОС: Gentoo -> Ubuntu

Re: ...и снова непонятно. :(

Сообщение aLexx programmer »

(agreed @ Воскресенье, 27 Марта 2005, 3:44) писал(а):

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

void parse_name(char *txt, char *dest, name_forms nform)
{
    char *tdest = dest;
    int cur_form = 0;
    tdest = strtok(txt, ";");
    if ( nform == name1 ) return;
    for (; cur_form < nform; ++cur_form )
    tdest = strtok(NULL, ";");
}

Почему же она не работает? :(


Оно же даже не скомпилируется :blink: name1 не определено :blink:

Да, кстати, а что оно должно делать? Я чего-то не понял...
Спасибо сказали:
Аватара пользователя
Alagert
Сообщения: 167

Re: ...и снова непонятно. :(

Сообщение Alagert »

а массиву разве размер указывать не надо?
и вроде это должно выглядеть так:

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

char a[N]={aaa,bbb,ccc,ddd};
Born to be ROOT
Спасибо сказали:
Аватара пользователя
aLexx programmer
Сообщения: 985
Статус: Турук-Макто
ОС: Gentoo -> Ubuntu

Re: ...и снова непонятно. :(

Сообщение aLexx programmer »

(Alagert @ Суббота, 02 Апреля 2005, 0:32) писал(а):а массиву разве размер указывать не надо?


Не надо.
char *a="Hello"; - константная строка
char a[]="Hello"; - нормальная модифицируемая строка
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: ...и снова непонятно. :(

Сообщение t.t »

(aLexx programmer @ Суббота, 02 Апреля 2005, 9:32) писал(а):Не надо.
...в том случае, когда массив инициализирован.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
agreed
Сообщения: 143
ОС: Fedora 10, Mac OS X 10.5

Re: ...и снова непонятно. :(

Сообщение agreed »

Извините, был в дауне... :) По-поводу name1 - это константа (глянь семантику strtok), т.е у меня есть такой вот енум:

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

 enum names {name0,name1...name6,namee}
. Функция должна выделять токены, разделенные ';' в зависимости от передаваемого nameX, т.е. для моего неработающего :) примера, функция должна вернуть 'bbb' в b при вызове parse_name(a,b,name1); Вот, в общем-то, и все. Цель: оптимальное хранение строки для слова, изменяемого по склонениям + его английский перевод. Пример:

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

 char a[]="язык;язык;языку;язык;языком;языке;language"
Константе name2, например, соответствует токен "языку". Если кто-то предложит более элегантное решение, буду рад. :)
Спасибо сказали:
Аватара пользователя
aLexx programmer
Сообщения: 985
Статус: Турук-Макто
ОС: Gentoo -> Ubuntu

Re: ...и снова непонятно. :(

Сообщение aLexx programmer »

(t.t @ Суббота, 02 Апреля 2005, 15:53) писал(а):
(aLexx programmer @ Суббота, 02 Апреля 2005, 9:32) писал(а):Не надо.
...в том случае, когда массив инициализирован.


Я это и имел в виду
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: ...и снова непонятно. :(

Сообщение t.t »

(agreed @ Понедельник, 04 Апреля 2005, 23:38) писал(а):Цель: оптимальное хранение строки для слова, изменяемого по склонениям + его английский перевод.
А что вы имеет ввиду под оптимальным хранением строки? И чем массив неоптимален?
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
agreed
Сообщения: 143
ОС: Fedora 10, Mac OS X 10.5

Re: ...и снова непонятно. :(

Сообщение agreed »

(t.t @ Среда, 06 Апреля 2005, 13:42) писал(а):
(agreed @ Понедельник, 04 Апреля 2005, 23:38) писал(а):Цель: оптимальное хранение строки для слова, изменяемого по склонениям + его английский перевод.
А что вы имеет ввиду под оптимальным хранением строки? И чем массив неоптимален?


Оптимальное с точки зрения построения массива, вот что я имел ввиду. :) Признаюсь, довольно неточно сформулировал. :wacko: Это должна быть нуль-строка, но ее содержимое должно быть как можно короче и удобнее в извлечении нужных данных.
Спасибо сказали:
Аватара пользователя
nercus
Сообщения: 150

Re: ...и снова непонятно. :(

Сообщение nercus »

Для agreed:
1. "почему не работает?". потому, что в конец функции надо добавить strcpy(dest,tdest)
2. char *tdest = dest; не имеет никакого смысла
3. совсем не рекомендую использовать strtok() - в man strtok четко написано, что она изменяет исходную строку. а это вряд-ли желательно. используй \0 вместо ; и while (nform--) txt += strlen(txt)+1; вместо strtok()
4. я бы сделал так:

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

#include <stdio.h>
#include <string.h>

char* a[] = {"aaa","bbb","ccc","ddd","eee","fff","ggg"};
char b[256];

int parse_name(char **txt, char *dst, int nform) {
    if (nform < 0 || nform > 6) {
        (*dst) = '\0';
        return -1;
    }
    strcpy(dst, *(char**)(txt + nform));
    return 0;
}
main() {
    int i;
    for(i=0; i<7; i++) {
        parse_name(a,b,i);
        printf("%s\n",b);
    }
    return 0;
}
2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
Спасибо сказали:
agreed
Сообщения: 143
ОС: Fedora 10, Mac OS X 10.5

Re: ...и снова непонятно. :(

Сообщение agreed »

(nercus @ Среда, 06 Апреля 2005, 20:38) писал(а):Для agreed:
1. "почему не работает?". потому, что в конец функции надо добавить strcpy(dest,tdest)
2. char *tdest = dest; не имеет никакого смысла
3. совсем не рекомендую использовать strtok() - в man strtok четко написано, что она изменяет исходную строку. а это вряд-ли желательно. используй \0 вместо ; и while (nform--) txt += strlen(txt)+1; вместо strtok()
4. я бы сделал так:


Спасибо большое! Тема закрыта...
Спасибо сказали:
Аватара пользователя
alphex_kaanoken
Сообщения: 30

Re: ...и снова непонятно. :(

Сообщение alphex_kaanoken »

первый перл от отвечавших

>char *a="Hello"; - константная строка
>char a[]="Hello"; - нормальная модифицируемая строка

поразительно - no comments - ну по нику видно - парень учись, потом уже припиывай иксики к нику и модный слова для тебя вроде - `programmer' и прочие.

Второе - автору - марш учить что такое указатель и как с оным работать - у тебя полное отсутсвие базы, пока ее нет к программированию тебя допускать нельзя, вообщем либо учись либо удавись.
Рекомендую прочесть - Язык Си Керниган и Ричи - очень помогает.
Don't try to look deeper, just look deeper than deep. ©
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: ...и снова непонятно. :(

Сообщение elide »

первый перл от отвечавших
>char *a="Hello"; - константная строка
>char a[]="Hello"; - нормальная модифицируемая строка
поразительно - no comments
попрошу прокомментировать. и где же здесь автор вопиюще неправ? я имею ввиду смысл, а не терминологию.
слава роботам!
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: ...и снова непонятно. :(

Сообщение t.t »

2alphex_kaanoken: я вижу, такой стиль общения для вас норма. В таком случае или гуляйте-ка отсюда на лор, или приучитесь к элементарной вежливости. Первое предупреждение. После третьего переведу в премодер.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
Sparky
Сообщения: 604
Статус: core dumped
ОС: Plan 9

Re: ...и снова непонятно. :(

Сообщение Sparky »

(t.t @ Четверг, 14 Апреля 2005, 14:14) писал(а):2alphex_kaanoken: я вижу, такой стиль общения для вас норма. В таком случае или гуляйте-ка отсюда на лор, или приучитесь к элементарной вежливости. Первое предупреждение. После третьего переведу в премодер.

Думаю давно пора - нас не приветствуются наезды, а за неаргументированные наезды в online надо банить, в offline бить лицо :)
Блог
--------------------

GCS/M/MU/P/IT/E d- s: a- C++(+++) UBL++ P->-- L+++$ E- W+++$ N* o? K? w>--
O M-@ V- PS@ PE+ Y+ PGP+ t 5 X R* tv-->- b++ DI? D>+ G e+(++) h--- r+ y++
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: ...и снова непонятно. :(

Сообщение t.t »

(Sparky @ Четверг, 14 Апреля 2005, 14:35) писал(а):Думаю давно пора - нас не приветствуются наезды, а за неаргументированные наезды в online надо банить, в offline бить лицо
Н-да, я тут ещё немного его сообщений почитал....
(t.t @ Четверг, 14 Апреля 2005, 14:14) писал(а):После третьего переведу в премодер.
А может и после второго.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Ananas
Сообщения: 64

Re: ...и снова непонятно. :(

Сообщение Ananas »

(alphex_kaanoken @ Четверг, 14 Апреля 2005, 8:45) писал(а):первый перл от отвечавших

>char *a="Hello"; - константная строка
>char a[]="Hello"; - нормальная модифицируемая строка

поразительно - no comments - ну по нику видно - парень учись, потом уже припиывай иксики к нику и модный слова для тебя вроде - `programmer' и прочие.

Второе - автору - марш учить что такое указатель и как с оным работать - у тебя полное отсутсвие базы, пока ее нет к программированию тебя допускать нельзя, вообщем либо учись либо удавись.
Рекомендую прочесть - Язык Си Керниган и Ричи - очень помогает.


рекомендую внимательно прочесть man gcc в части -fwritable-strings и только после этого посылать кого-то учиться
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: ...и снова непонятно. :(

Сообщение oav »

(Ananas @ Четверг, 14 Апреля 2005, 16:00) писал(а):рекомендую внимательно прочесть man gcc в части -fwritable-strings и только после этого посылать кого-то учиться

:thumbsup:
Спасибо сказали:
Аватара пользователя
Sparky
Сообщения: 604
Статус: core dumped
ОС: Plan 9

Re: ...и снова непонятно. :(

Сообщение Sparky »

(t.t @ Четверг, 14 Апреля 2005, 14:48) писал(а):
(Sparky @ Четверг, 14 Апреля 2005, 14:35) писал(а):Думаю давно пора - нас не приветствуются наезды, а за неаргументированные наезды в online надо банить, в offline бить лицо
Н-да, я тут ещё немного его сообщений почитал....
(t.t @ Четверг, 14 Апреля 2005, 14:14) писал(а):После третьего переведу в премодер.
А может и после второго.


Я тут почитал другие посты его - эо просто какой то БОТ... так что не нужно обижаться а просто забанить чтобы воздух тут не портил... ну или конкретно прдупредить, хотя мне кажется это не подействует :(
Блог
--------------------

GCS/M/MU/P/IT/E d- s: a- C++(+++) UBL++ P->-- L+++$ E- W+++$ N* o? K? w>--
O M-@ V- PS@ PE+ Y+ PGP+ t 5 X R* tv-->- b++ DI? D>+ G e+(++) h--- r+ y++
Спасибо сказали:
Аватара пользователя
oav
Бывший модератор
Сообщения: 296

Re: ...и снова непонятно. :(

Сообщение oav »

(Sparky @ Четверг, 14 Апреля 2005, 16:23) писал(а):Я тут почитал другие посты его -  эо просто какой то БОТ... так что не нужно обижаться а просто забанить чтобы воздух тут не портил... ну или конкретно прдупредить, хотя мне кажется это не подействует :(

На лоре его познания в программирование и умения дискутировать уже опустили по полной и давно - примерно в тех-же терминах, что он теперь использует тут на неопытных людях - на лицо попытка себя преподнять в своихже глазах, детский сад какой-то. Типично закомплексованное хамло
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: ...и снова непонятно. :(

Сообщение t.t »

(Sparky @ Четверг, 14 Апреля 2005, 15:23) писал(а):Я тут почитал другие посты его - эо просто какой то БОТ... так что не нужно обижаться а просто забанить чтобы воздух тут не портил... ну или конкретно прдупредить, хотя мне кажется это не подействует
(oav @ Четверг, 14 Апреля 2005, 15:34) писал(а):На лоре его познания в программирование и умения дискутировать уже опустили по полной и давно - примерно в тех-же терминах, что он теперь использует тут на неопытных людях - на лицо попытка себя преподнять в своихже глазах, детский сад какой-то. Типично закомплексованное хамло
Ну, предупредить я его уже предупредил. Если не подействует -- будем банить, премодер в данном случае действительно слишком: было бы на что силы тратить...
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
bogus
Сообщения: 160

Re: ...и снова непонятно. :(

Сообщение bogus »

ладно вам, хватит уже...
Как всякое несовершенное существо я могу ошибаться. Простите меня.
jabberId = foldl (flip (:)) [] "ur.rebbaj@43sugob"
Спасибо сказали:
Аватара пользователя
alphex_kaanoken
Сообщения: 30

Re: ...и снова непонятно. :(

Сообщение alphex_kaanoken »

Опять по порядку,
сначала господам тем что так захотелось показать свою "крутизну" и тем самым выставить свою глупость.

>На лоре его познания в программирование и умения дискутировать уже опустили по полной и давно - примерно в тех-же терминах, что он теперь использует тут на неопытных людях - на лицо попытка себя преподнять в своихже глазах, детский сад какой-то. Типично закомплексованное хамло

Во первых было два спора
- проверка возвращаемого значения malloc()
- моя ошибка с (пост|пре)фиксными операторами - ошибка да была моя - я ее признал,
про первое не хочу разводить флейм, но я уже сотни раз пояснял что и как - а если господа орущие не знают как работает mm и почему во многих случаях проверка на NULL просто ничего не даст - то это следствие их безграмотности. К сведению я проверяю вывод все равно, но если логика не зависит (те мне не надо автомат конечный переводить в статус ожидания - один из примеров), то проверок я потом вставлю за минуту - у меня подход - сначала алгоритм и логика, а потом уже мелочи. На ЛОРе принцип стада - один сказал ака умное - другие поехали кричать - "бугага" и прочие бессысленный выражения. Вы же господин не зная уровень оппонента начинаете его неоправданно унижать - ну и кто из нас идиот? Сначала будьте готовы к ответу - а потом отвечайте мой вам совет.

По поводу двух выражений - господа а теперь думаем что компилятор делает с один и что компилятор делает с другим.

Про ключик к компилятору - почитайте внимательно все мелочи, а не кидайтесь, помниться некие господа в мануале Notes не читали - так потом было смешно слушать их доказательства.

И кстати что здесь такого грубого за исключением одной фразы? Скажу вам ничего, вы либо то что называется "лсишком нежные" , либо возомнили о себе многое, либо не воспринимаете нормальный разговор с элементами несильной даже сказал бы легкой грубости, по сути это юмор скорее, если бы надо было ответить более грубо - выглядело это бы иначе.

Да и с автора определение что такое указатель. Это не грубость и не наезд - а попытка помочь и направить на правильное понимание дела.
Don't try to look deeper, just look deeper than deep. ©
Спасибо сказали:
sdk
Бывший модератор
Сообщения: 210

Re: ...и снова непонятно. :(

Сообщение sdk »

Указатель - это такая хрень, на дороге висит. Часто выполняется в форме стрелки. Временами на нем пишут всякие буквы - и почти всегда оказывается, что эти буквы означают название какого-нибудь населенного пункта :D.
В зависимости от ситуации, можно использовать палец руки как указатель. В этом случае, указатель (т.е. палец) несет другую нагрузку - он разделяет Единство Бытия на два объекта - "указующего" и "указуемого" и служит признаком начала их взаимодействия между собой :).

Вот.
Это я все к тому, ребятки, что давайте жить дружно и весело! :D
Серьезность - это способ сделать простые вещи сложными.
Если много знать - устанут глаза. Если много спать - то нет.
Нас никому не сбить с пути - нам пофигу куда идти.
:-)
Спасибо сказали:
Аватара пользователя
nercus
Сообщения: 150

Re: ...и снова непонятно. :(

Сообщение nercus »

Для alphex_kaanoken:
ANSI C99 Standard @ 6.7.8 Initialization
EXAMPLE 8         The declaration
    char s[] = "abc", t[3] = "abc";
defines ``plain'' char array objects s and t whose elements
are initialized with character string literals.  This
declaration is identical to

    char s[] = { 'a', 'b', 'c', '\0' },
         t[] = { 'a', 'b', 'c' };
The contents of the arrays are modifiable. On the other
hand, the declaration

    char *p = "abc";
defines p with type ``pointer to char'' and initializes it
to point to an object with type ``array of char'' with
length 4 whose elements are initialized with a character
string literal. [i]If an attempt is made to use p to modify the
contents of the array, the behavior is undefined[\i].

вам мало? хорошо.

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

00:45 nercus@ice tmp $ cat x.c
#include <stdio.h>

char a[] = "bbbbbb";
char *b = "aaaaaa";

main() {
    printf("a = %s\n",a);
    a[1]='\0';
    printf("a = %s\n",a);
    printf("b = %s\n",b);
    b[1]='\0';
    printf("b = %s\n",b);
    return 0;
}

00:45 nercus@ice tmp $ gcc x.c
00:45 nercus@ice tmp $ ./a.out
a = bbbbbb
a = b
b = aaaaaa
Segmentation fault


говорите, "что компилятор делает?". хорошо. посмотрим.

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

00:46 nercus@ice tmp $ gcc -S x.c
00:46 nercus@ice tmp $ cat x.s
    .file   "x.c"
.globl a
    .data
    .type   a, @object
    .size   a, 7
a:
    .string "bbbbbb"
    .section    [b].rodata[/b]
.LC0:
    .string "aaaaaa"
.globl b
    .data
    .align 4
    .type   b, @object
    .size   b, 4
b:
    .long   .LC0
    .section    .rodata
.LC1:
    .string "a = %s\n"
.LC2:
    .string "b = %s\n"
    .text
.globl main
    .type   main, @function
main:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $8, %esp
    andl    $-16, %esp
    movl    $0, %eax
    subl    %eax, %esp
    movl    $a, 4(%esp)
    movl    $.LC1, (%esp)
    call    printf
    movb    $0, a+1
    movl    $a, 4(%esp)
    movl    $.LC1, (%esp)
    call    printf
    movl    b, %eax
    movl    %eax, 4(%esp)
    movl    $.LC2, (%esp)
    call    printf
    movl    b, %eax
    incl    %eax
    movb    $0, (%eax)
    movl    b, %eax
    movl    %eax, 4(%esp)
    movl    $.LC2, (%esp)
    call    printf
    movl    $0, %eax
    leave
    ret
    .size   main, .-main
    .section    .note.GNU-stack,"",@progbits
    .ident  "GCC: (GNU) 3.3.5-20050130 (Gentoo Linux 3.3.5.20050130-r1, ssp-3.3.5.20050130-1, pie-8.7.7.1)"

если особо одаренные не вкурсе, то ".section .rodata" - это Read Only память.
еще вопросы остались?

PS: задолбал
2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
Спасибо сказали:
Аватара пользователя
alphex_kaanoken
Сообщения: 30

Re: ...и снова непонятно. :(

Сообщение alphex_kaanoken »

ааа все признал свою ошибку - извиняюсь
Don't try to look deeper, just look deeper than deep. ©
Спасибо сказали:
Аватара пользователя
elide
Бывший модератор
Сообщения: 2421
Статус: Übermensch
ОС: лялих

Re: ...и снова непонятно. :(

Сообщение elide »

Для alphex_kaanoken:
По поводу двух выражений - господа а теперь думаем что компилятор делает с один и что компилятор делает с другим.
имхо, пример nercus не слишком очевиден (хотя цитата из стандарта просто исчерпывающая).
попробуй запустить вот это

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

int main(){
   char *a="12345";
   char *b="67890";
   char i=10;
   char c[]="54321";
   char j=20;
   char *d="09876";
   printf("%p\n%p\n%p\n%p\n%p\n%p\n",a,b,&i,c,&j,d);
}
и убедитесь, что в случае char c[]="54321"; собственно "54321" располагается совсем не там, где char c[];

кроме того, смею тебя заверить, что каждый, участвовавший в этом треде, готов ответить за свои слова более чем аргументированно. а вот от тебя кроме бессмысленных вы..онов ничего не слышно...
слава роботам!
Спасибо сказали:
Аватара пользователя
alphex_kaanoken
Сообщения: 30

Re: ...и снова непонятно. :(

Сообщение alphex_kaanoken »

ну давай рассказывай как mm работает и почему при возврате не NULL ты можешь запросто получить segfault

я думаю что из вас никто этого не сможет объяснить

PS вспоминая более старые форматы и стандарты вспоминаем как там с ro memory =)
Don't try to look deeper, just look deeper than deep. ©
Спасибо сказали:
Аватара пользователя
nercus
Сообщения: 150

Re: ...и снова непонятно. :(

Сообщение nercus »

Для elide:
я просто хотел показать, почему
char *a="Hello"; - константная строка
char a[]="Hello"; - нормальная модифицируемая строка

имхо вариант с глобальными переменными удачнее (более идеологически чистый что-ли), потому как разница только в том, что одна попадает в ro память, а другая в rw. потому и написал именно его. вдобавок ко всему прочему, это косвенно объясняет, причем тут -fwritable-strings (правда я это осознал только сейчас).
допускаю, что заблуждаюсь, поэтому можно по-подробней, почему не слишком очевиден.

Для alphex_kaanoken:
а если бы не хамили откровенно, то и извиняться было бы не за что. и вы бы не выглядели идиотом в глазах остальных форумчан. цитирую вас же:
Вы же господин не зная уровень оппонента начинаете его неоправданно унижать - ну и кто из нас идиот? Сначала будьте готовы к ответу - а потом отвечайте мой вам совет.

рекомендую пересмотреть формат вашего общения. и это касается не только этого треда.
да. и скушайте молочного шоколада nestle. "нежнее, виктор, еще нежнее"(С)

nercus добавил в 15.04.2005 02:22

Для alphex_kaanoken:
>почему при возврате не NULL ты можешь запросто получить segfault
это?

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

#man malloc
...
BUGS
       By  default,  Linux  follows  an optimistic memory allocation strategy.
       This means that when malloc() returns non-NULL there  is  no  guarantee
       that the memory really is available. This is a really bad bug.  In case
       it turns out that the system is out of memory, one  or  more  processes
       will  be  killed by the infamous OOM killer.  In case Linux is employed
       under circumstances where it would be less desirable to  suddenly  lose
       some randomly picked processes, and moreover the kernel version is suf-
       ficiently recent, one can switch off this overcommitting behavior using
       a command like
              # echo 2 > /proc/sys/vm/overcommit_memory
       See  also  the  kernel  Documentation  directory,  files vm/overcommit-
       accounting and sysctl/vm.txt.
2.6.14-gentoo-r5
kde-3.5.0 | openbox-3.2
Deep Purple | Rob Zombie | Led Zeppelin | ДДТ
Спасибо сказали: