|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Konstantin Tokar 2:5020/400 18 Aug 2002 20:59:16 To : Alexey Desyatnik Subject : Re: Perl, ООП и критика --------------------------------------------------------------------------------
Alexey Desyatnik wrote:
>
> "Konstantin Tokar" <tokar@apmsun.mpei.ac.ru> сообщил/сообщила в новостях
> следующее: news:3D5F5FFE.A33B69AF@apmsun.mpei.ac.ru...
>
> > > А если потребовать 200Mb, то Перл будет жутко свопиться,
> > > а цЭ просто вылетит. GPF. Проверено (gcc 2.9последний / 128 мозга)
> > > И что лучше?
> >
> > Лучше понять, почему у тебя С вылетает. Похоже, проблема в программе, а
> > не в языке или компиляторе. Проверяй указатели.
>
> #include <stdio.h>
> #include <malloc.h>
>
> int main (int argc, char **argv) {
> int *a;
> int i;
> /* Try to allocate very big int array */
> if (NULL == (a = malloc(50000000))) {
> printf ("Malloc failed!\n");
> return 0;
> }
> for (i = 0; i < 50000000; i++)
> a[i] = i;
> printf ("OK!\n");
> return -1;
> }
>
> Все должно работать нормально, не так ли? В крайнем случае - выскочить
> с соответствующим сообщением. Под EGCS 2.91 (из Cygwin B20) программа
> выдает невнятное сообщение об ошибке, под VC 6.0 и BCC 5.5 - "Программа
> выполнила недопустимую операцию" (соответственно 1 и 3 раза). В Линух
> грузиться лень было, результат и так ясен.
>
> WBR, AD (desyatnik@dax.ru)
>
> P.S. И не надо говорить, что в реальных задачах массив надо на
> куски бить, односвязные списки применять и т.п. - в результате
> к тому же Перлу придем. Или Лиспу. Или Прологу. Hо - самопальному.
>
Хорошо что ты привел пример программы. Дело в том, что malloc требует
число байтов, то есть в твоей программе надо было писать
if (NULL == (a = malloc(50000000 * sizeof(int)) ))
или если не ошибаюсь для пущей надежности с учетом возможного изменения
типа sizeof(a[0)) - на С очень давно не писал, sorry.
Как рабочую гипотезу рекомендую компилятор считать авторитетом в высшей
инстанции - его ошибки неимоверно менее вероятны, чем программиста.
--- ifmail v.2.15dev5
* Origin: Demos online service (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/12770aab13dd6.html, оценка из 5, голосов 10
|