Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: C++ непонятнаые сообщения  (Прочитано 1263 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Nort

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
C++ непонятнаые сообщения
« : 04 Июля 2009, 21:24:40 »
При компиляции программы в Eclipse( а также в kdevelop) имею следующее сообщение:
*** glibc detected *** /home/nort/workspace/rs222/Debug/rs222: free(): invalid size: 0x085f7088 ***
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6[0xb7dac604]
/lib/tls/i686/cmov/libc.so.6[0xb7dafabc]
/lib/tls/i686/cmov/libc.so.6(__libc_malloc+0x95)[0xb7db09c5]
/usr/lib/libstdc++.so.6(_Znwj+0x27)[0xb7f90f47]
/usr/lib/libstdc++.so.6(_Znaj+0x1d)[0xb7f9108d]
/home/nort/workspace/rs222/Debug/rs222[0x804936d]
/home/nort/workspace/rs222/Debug/rs222[0x8049a8d]
/home/nort/workspace/rs222/Debug/rs222[0x8049db7]
/home/nort/workspace/rs222/Debug/rs222[0x8049fff]
/lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe5)[0xb7d53775]
/home/nort/workspace/rs222/Debug/rs222[0x8048a31]
======= Memory map: ========
08048000-0804b000 r-xp 00000000 08:01 2778791    /home/nort/workspace/rs222/Debug/rs222
0804b000-0804c000 r--p 00002000 08:01 2778791    /home/nort/workspace/rs222/Debug/rs222
0804c000-0804d000 rw-p 00003000 08:01 2778791    /home/nort/workspace/rs222/Debug/rs222
085d6000-0863a000 rw-p 085d6000 00:00 0          [heap]
b7c00000-b7c21000 rw-p b7c00000 00:00 0
b7c21000-b7d00000 ---p b7c21000 00:00 0
b7d3c000-b7d3d000 rw-p b7d3c000 00:00 0
b7d3d000-b7e99000 r-xp 00000000 08:01 2884830    /lib/tls/i686/cmov/libc-2.9.so
b7e99000-b7e9a000 ---p 0015c000 08:01 2884830    /lib/tls/i686/cmov/libc-2.9.so
b7e9a000-b7e9c000 r--p 0015c000 08:01 2884830    /lib/tls/i686/cmov/libc-2.9.so
b7e9c000-b7e9d000 rw-p 0015e000 08:01 2884830    /lib/tls/i686/cmov/libc-2.9.so
b7e9d000-b7ea0000 rw-p b7e9d000 00:00 0
b7ea0000-b7ead000 r-xp 00000000 08:01 2867265    /lib/libgcc_s.so.1
b7ead000-b7eae000 r--p 0000c000 08:01 2867265    /lib/libgcc_s.so.1
b7eae000-b7eaf000 rw-p 0000d000 08:01 2867265    /lib/libgcc_s.so.1
b7eaf000-b7eb0000 rw-p b7eaf000 00:00 0
b7eb0000-b7ed4000 r-xp 00000000 08:01 2884838    /lib/tls/i686/cmov/libm-2.9.so
b7ed4000-b7ed5000 r--p 00023000 08:01 2884838    /lib/tls/i686/cmov/libm-2.9.so
b7ed5000-b7ed6000 rw-p 00024000 08:01 2884838    /lib/tls/i686/cmov/libm-2.9.so
b7ed6000-b7fba000 r-xp 00000000 08:01 1116605    /usr/lib/libstdc++.so.6.0.10
b7fba000-b7fbe000 r--p 000e3000 08:01 1116605    /usr/lib/libstdc++.so.6.0.10
b7fbe000-b7fbf000 rw-p 000e7000 08:01 1116605    /usr/lib/libstdc++.so.6.0.10
b7fbf000-b7fc5000 rw-p b7fbf000 00:00 0
b7fd7000-b7fda000 rw-p b7fd7000 00:00 0
b7fda000-b7fdb000 r-xp b7fda000 00:00 0          [vdso]
b7fdb000-b7ff7000 r-xp 00000000 08:01 2867223    /lib/ld-2.9.so
b7ff7000-b7ff8000 r--p 0001b000 08:01 2867223    /lib/ld-2.9.so
b7ff8000-b7ff9000 rw-p 0001c000 08:01 2867223    /lib/ld-2.9.so
bfee4000-bfef9000 rw-p bffeb000 00:00 0          [stack]
Что это такое? И как с этим бороться?
Прилагаю исходник.
Компилилось в Kubuntu 9.04, версия компилятора GCC 4.3.3-Ubuntu.

Оффлайн axe

  • Старожил
  • *
  • Сообщений: 1203
    • Просмотр профиля
Re: C++ непонятнаые сообщения
« Ответ #1 : 04 Июля 2009, 23:40:39 »
Если не ошибаюсь, это значит, что блок памяти по этому адресу ты выделял одного размера, а освобождаешь другого.

ЗЫ. Код лучше заверни в спойлер, а то лень возиться.

Оффлайн Nort

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: C++ непонятнаые сообщения
« Ответ #2 : 05 Июля 2009, 04:56:53 »
(Нажмите, чтобы показать/скрыть)
выложил код в спойлере) а почему Windows все компилит и не давится?)

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: C++ непонятнаые сообщения
« Ответ #3 : 05 Июля 2009, 10:36:16 »
У меня не повторяется.

А вообще код ужасный. Ни одного осовобождения памяти не проводится, зато используется куча new.
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн Nort

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: C++ непонятнаые сообщения
« Ответ #4 : 05 Июля 2009, 13:24:09 »
У меня не повторяется.

А вообще код ужасный. Ни одного осовобождения памяти не проводится, зато используется куча new.
каким образом производить освобождение? с помощью delete []?

Оффлайн Sova777

  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
    • Несколько слов о NetBeans C/C++ Pack'е
Re: C++ непонятнаые сообщения
« Ответ #5 : 05 Июля 2009, 14:02:44 »
Обрати внимания на следующии предупреждения:
(Нажмите, чтобы показать/скрыть)
Пользователь OpenSolaris 2008.11, Ubuntu 8.10, Windows XP. Mac OS X не нравится, стараюсь не использовать.

Оффлайн Nort

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: C++ непонятнаые сообщения
« Ответ #6 : 05 Июля 2009, 14:45:14 »
то бишь нужно сразу убивать то что создал через new сразу после использования верно?

Оффлайн Sova777

  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
    • Несколько слов о NetBeans C/C++ Pack'е
Re: C++ непонятнаые сообщения
« Ответ #7 : 05 Июля 2009, 15:08:37 »
В такой короткой программе не обязательно. Но научится бережно обращаться с памятью полезно. Но у тебя, по моему, в коде более серьезная проблема - выход за границы массива.
Пользователь OpenSolaris 2008.11, Ubuntu 8.10, Windows XP. Mac OS X не нравится, стараюсь не использовать.

Оффлайн digiwhite

  • Активист
  • *
  • Сообщений: 732
  • http://www.welinux.ru
    • Просмотр профиля
    • http://www.welinux.ru
Re: C++ непонятнаые сообщения
« Ответ #8 : 05 Июля 2009, 15:50:55 »
то бишь нужно сразу убивать то что создал через new сразу после использования верно?

Вообще без необходимости использовать динамическую память ненужно :), ИМХО.
Социальная сеть не фанатично настроенных линуксойдов - http://www.welinux.ru

Оффлайн axe

  • Старожил
  • *
  • Сообщений: 1203
    • Просмотр профиля
Re: C++ непонятнаые сообщения
« Ответ #9 : 05 Июля 2009, 16:02:30 »
Вообще желательно читать умные книжки. Метод тыка в программировании проходит очень редко. Особенно в таких "вольных" языках как C и C++.

Оффлайн Nort

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: C++ непонятнаые сообщения
« Ответ #10 : 05 Июля 2009, 21:10:25 »
Ну дело в том что Windows это все хавает) а в линуксе я даже не знаю что тыкать

Оффлайн digiwhite

  • Активист
  • *
  • Сообщений: 732
  • http://www.welinux.ru
    • Просмотр профиля
    • http://www.welinux.ru
Re: C++ непонятнаые сообщения
« Ответ #11 : 05 Июля 2009, 21:24:10 »
В релизном билде хавает?
Социальная сеть не фанатично настроенных линуксойдов - http://www.welinux.ru

Оффлайн axe

  • Старожил
  • *
  • Сообщений: 1203
    • Просмотр профиля
Re: C++ непонятнаые сообщения
« Ответ #12 : 05 Июля 2009, 21:29:40 »
В винде какой компилятор/C runtime?

Оффлайн Sova777

  • Участник
  • *
  • Сообщений: 208
    • Просмотр профиля
    • Несколько слов о NetBeans C/C++ Pack'е
Re: C++ непонятнаые сообщения
« Ответ #13 : 05 Июля 2009, 22:05:08 »
Смотри:

Read from out-of-bounded (rob):
Attempting to read 4 bytes at address 0x806bf28
    which is just past heap block of size 8 bytes at 0x806bf20
This block was allocated from:
   [1] operator new()
   [2] operator new[]()
   [3] multiPol() at line 162 in "newfile.cpp"
   [4] coderRS() at line 285 in "newfile.cpp"
   [5] main() at line 317 in "newfile.cpp"
Location of error: newfile.cpp, line 116, sdvig()

Есть ошибка в 116 строке. Берём отладчик. Останавливаемся на 160 строке: int *t = new int[nt];
В этот момент nt = 2. Значит будут существовать t[0] и t[1], а t[2] не будет.
Остановимся на 113 строке (nc += 1;). После её выполнения nc = 3.
Остановимя на 115 строке (int t = c; ). В этот момент i = 2, а c[2] не существует.
116 строка (c = c[i - 1]; ) тоже присвоит значение неизвестно куда.

и т.д.

« Последнее редактирование: 05 Июля 2009, 22:19:20 от Sova777 »
Пользователь OpenSolaris 2008.11, Ubuntu 8.10, Windows XP. Mac OS X не нравится, стараюсь не использовать.

Оффлайн Nort

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: C++ непонятнаые сообщения
« Ответ #14 : 06 Июля 2009, 10:48:30 »
Смотри:

Read from out-of-bounded (rob):
Attempting to read 4 bytes at address 0x806bf28
    which is just past heap block of size 8 bytes at 0x806bf20
This block was allocated from:
   [1] operator new()
   [2] operator new[]()
   [3] multiPol() at line 162 in "newfile.cpp"
   [4] coderRS() at line 285 in "newfile.cpp"
   [5] main() at line 317 in "newfile.cpp"
Location of error: newfile.cpp, line 116, sdvig()

Есть ошибка в 116 строке. Берём отладчик. Останавливаемся на 160 строке: int *t = new int[nt];
В этот момент nt = 2. Значит будут существовать t[0] и t[1], а t[2] не будет.
Остановимся на 113 строке (nc += 1;). После её выполнения nc = 3.
Остановимя на 115 строке (int t = c; ). В этот момент i = 2, а c[2] не существует.
116 строка (c = c[i - 1]; ) тоже присвоит значение неизвестно куда.

и т.д.


спасибо за грамотный ответ. Теперь понятно откуда ошибки.
ДА Windows все хавает, насчет компилятора не знаю, по этому поводу никогда не интересовался))

 

Страница сгенерирована за 0.064 секунд. Запросов: 25.