Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.66/29: Рейтинг темы: голосов - 29, средняя оценка - 4.66
3 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 28

glibc detected

09.01.2012, 19:29. Показов 5582. Ответов 20
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Хочется узнать, что конкретно означает эта ошибка (glibc detected). Где-то я на забугорных форумах читал, что она возникает при удалении объектов в динамической памяти, в которых лежит всякий неинициализированный мусор. То есть, ожидаемый результат выполнения кода
C++
1
2
3
4
5
6
7
8
9
10
#include <stdlib.h>
int main()
{
    double *a;
    const int n = 10;
    a = new double[n];
    a[0] = a[-1];       //a[0] is now unitialized rubbish
    delete [] a;        //program will crash here
    return 0;           //program must never reach this point
}
есть ошибка glibc, однако почему-то программа корректно завершает работу, несмотря на то, что в a[-1] действительно лежит мусор (1.34322453e-312)

upd: Вообще было бы круто увидеть простейший пример кода, который инициирует эту ошибку.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.01.2012, 19:29
Ответы с готовыми решениями:

HEAP CORRUPTION DETECTED
Не могу понять, почему выдает такую ошибку, когда я освобождаю память: &quot;HEAP CORRUPTION DETECTED: after Normal block&quot;. Я вроде нигде...

heap corruption detected
имеется класс CStr - строка, в нём есть конструктор CStr CStr::CStr(char *s) { length = 0; while (s) length++; str = new...

Error detected (LME286)
Ребят, слез с Dev-C++ на XE2: #include &lt;iostream&gt; using namespace std; void square(int x, int &amp;result) { result = x*x;...

20
Заблокирован
09.01.2012, 19:42
Цитата Сообщение от xecu91 Посмотреть сообщение
//program will crash here
должно быть на одну строку выше, указатель то корректный его можно делитить, а это
Цитата Сообщение от xecu91 Посмотреть сообщение
a[0] = a[-1];
попахивает #PF, хочешь крэша потыкай в другие адреса, а насчёт ошибки даже не знаю, лень гуглить но мне кажется ты это из контекста выдрал "glibc detected" переводится как "glibc обнаружен" очень странное название для ошибки, вообще в POSIX системе тебе должен sigsegv приплыть
0
3 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 28
09.01.2012, 19:51  [ТС]
LosAngeles, SIGSEGV приплывает при выходе за пределы страницы памяти, адрес a[-1] лежит в нашей странице и ничего страшного не происходит с точки зрения сегментирования.
0
Заблокирован
09.01.2012, 20:05
ну значит программа правильная, держи конфетку
0
3 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 28
09.01.2012, 20:09  [ТС]
я вообще ожидал увидеть что-то вроде этого
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
*** glibc detected *** ./qr: double free or corruption (fasttop): 0x08629108 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6c501)[0xdc0501]
/lib/libc.so.6(+0x6dd70)[0xdc1d70]
/lib/libc.so.6(cfree+0x6d)[0xdc4e5d]
/usr/lib/libstdc++.so.6(_ZdlPv+0x21)[0x538441]
/usr/lib/libstdc++.so.6(_ZdaPv+0x1d)[0x53849d]
./qr[0x8048b9a]
./qr[0x8048a4c]
./qr[0x8048c62]
./qr[0x8048dd5]
/lib/libc.so.6(__libc_start_main+0xe7)[0xd6ace7]
./qr[0x8048611]
======= Memory map: ========
0048e000-0056d000 r-xp 00000000 08:06 1576534    /usr/lib/libstdc++.so.6.0.14
0056d000-00571000 r--p 000de000 08:06 1576534    /usr/lib/libstdc++.so.6.0.14
00571000-00572000 rw-p 000e2000 08:06 1576534    /usr/lib/libstdc++.so.6.0.14
00572000-00579000 rw-p 00000000 00:00 0 
00623000-0063d000 r-xp 00000000 08:06 2228303    /lib/libgcc_s.so.1
0063d000-0063e000 r--p 00019000 08:06 2228303    /lib/libgcc_s.so.1
0063e000-0063f000 rw-p 0001a000 08:06 2228303    /lib/libgcc_s.so.1
00949000-0096d000 r-xp 00000000 08:06 2237906    /lib/libm-2.12.1.so
0096d000-0096e000 r--p 00023000 08:06 2237906    /lib/libm-2.12.1.so
0096e000-0096f000 rw-p 00024000 08:06 2237906    /lib/libm-2.12.1.so
00ab7000-00ab8000 r-xp 00000000 00:00 0          [vdso]
00d54000-00eab000 r-xp 00000000 08:06 2237902    /lib/libc-2.12.1.so
00eab000-00ead000 r--p 00157000 08:06 2237902    /lib/libc-2.12.1.so
00ead000-00eae000 rw-p 00159000 08:06 2237902    /lib/libc-2.12.1.so
00eae000-00eb1000 rw-p 00000000 00:00 0 
00f3e000-00f5a000 r-xp 00000000 08:06 2237899    /lib/ld-2.12.1.so
00f5a000-00f5b000 r--p 0001b000 08:06 2237899    /lib/ld-2.12.1.so
00f5b000-00f5c000 rw-p 0001c000 08:06 2237899    /lib/ld-2.12.1.so
08048000-0804a000 r-xp 00000000 08:06 1849257    /home/anton/programming/matrices/QR/qr
0804a000-0804b000 r--p 00001000 08:06 1849257    /home/anton/programming/matrices/QR/qr
0804b000-0804c000 rw-p 00002000 08:06 1849257    /home/anton/programming/matrices/QR/qr
08629000-0864a000 rw-p 00000000 00:00 0          [heap]
b7600000-b7621000 rw-p 00000000 00:00 0 
b7621000-b7700000 ---p 00000000 00:00 0 
b7703000-b7706000 rw-p 00000000 00:00 0 
b7712000-b7715000 rw-p 00000000 00:00 0 
bffdc000-bfffd000 rw-p 00000000 00:00 0          [stack]
Аварийный останов
0
Заблокирован
09.01.2012, 20:17
ясно, ну за эту программу можешь не переживать, всё выделяется удаляется корректно
0
3 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 28
09.01.2012, 20:19  [ТС]
Ну это я и сам вижу, а надо, чтобы прога падала =) какой простейший пример программы, инициирующий эту ошибку?
0
Заблокирован
09.01.2012, 20:24
Цитата Сообщение от xecu91 Посмотреть сообщение
a[0] = a[-1];
a = -1;
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
09.01.2012, 20:29
можт имелось в виду чтонить вроде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdlib.h>
int main()
{
        double **a;
        const int n = 10;
        a = new double*[n];
        a[0] = new double(1);
        a[1] = new double(2);
        a[0] = a[-1];           //a[0] is now unitialized rubbish
        delete a[0];            //program will crash here
        delete a[1];
        delete [] a;
        return 0;                       //program must never reach this point
}
0
3 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 28
09.01.2012, 20:33  [ТС]
Цитата Сообщение от LosAngeles Посмотреть сообщение
a = -1;
не скомпилируется, invalid conversion from int to double* (или double to double*)

alex_x_x,
Нет, не это, такая ошибка возникает и в одномерных массивах, по вызову delete.
0
Заблокирован
09.01.2012, 20:41
Цитата Сообщение от xecu91 Посмотреть сообщение
не скомпилируется, invalid conversion from int to double* (или double to double*)
приведи к нужному типу и скомпилируй, не вижу проблемы
0
3 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 28
09.01.2012, 20:45  [ТС]
LosAngeles, упадёт с Segmentation Fault, т.к. адрес (double*)(-1) на другой странице лежит. Нужно поймать другую ошибку.
0
Псевдослучайный
1946 / 1146 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
09.01.2012, 21:17
О чём вы, человечки? Сегфолт может состоятся не раньше, чем по разыменованному адресу будет попытка чтения/записи. А ошибка glibc вылезает из-за попытки освободить адрес, на который ничего не выделялось.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.01.2012, 09:25
Цитата Сообщение от xecu91 Посмотреть сообщение
Вообще было бы круто увидеть простейший пример кода, который инициирует эту ошибку
Второй пример в конце данного поста: https://www.cyberforum.ru/cpp-... ost1671703
Если я правильно понял, чего надо
0
10.01.2012, 11:58

Не по теме:

Цитата Сообщение от LosAngeles Посмотреть сообщение
"glibc detected" переводится как "glibc обнаружен"
glibc обнаружил(а) ;)

0
Evg
10.01.2012, 12:08

Не по теме:

Цитата Сообщение от fasked Посмотреть сообщение
glibc обнаружил(а) ;)
Скорее как "обнаружено glibc'ёй"

0
10.01.2012, 12:10

Не по теме:

а у меня ассоциируется с
achtung detected!

0
10.01.2012, 12:11

Не по теме:

Цитата Сообщение от Evg Посмотреть сообщение
Скорее как "обнаружено glibc'ёй"
Это если литературно переводить :D

0
3 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 28
10.01.2012, 16:03  [ТС]
В примере Evg действительно invalid pointer, так как под указатель, который пытаемся удалить, ничего не выделялось, и вот glibc'ёй (c) и было обнаружен invalid memory. В моём случае glibc обнаруживает double free or corroption. Как инициировать double free - понятно.
C++
1
2
3
4
5
6
7
8
9
#include <stdlib.h>
int main()
{
     double *a;
     a = new double [2];
     delete [] a;
     delete [] a;     // glibc detected double free
     return 0;
}
А как инициировать corruption - непонятно.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
10.01.2012, 16:26
Вот тебе исходники от glibc'шного malloc'а: тыц. Вот ссылка на каталог, где лежит malloc: тыц. Ищешь слово "corrupted", и куришь исходники на предмет того, как это получить.

Для чистоты эксперимента можно заёти сюда, выбрать именно твою версию glibc, далее тыкаешь, например, в "glibc-2.12.2", далее в "tree", дадее выбираешь каталог malloc, в нём файл malloc.c и тыкаешь в "raw"

Добавлено через 1 минуту
Цитата Сообщение от xecu91 Посмотреть сообщение
А как инициировать corruption - непонятно
В моём случае по сути и было corruption. Либо переписывай таким образом:

C
1
2
3
4
5
6
7
8
9
10
11
#include <stdlib.h>
 
int main (void)
{
  int *p;
  
  p = malloc (100);
  *(p-1) = 0;
  free (p);
  return 0;
}
принципиальной разницы нет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2012, 16:26
Помогаю со студенческими работами здесь

Heap Corruption detected (
что не правильно? запускаю и ошибка вылетает как на предидущей картинке template&lt;typename TT&gt; class Matrix { public:...

Heap corruption detected
Добрый день! Проблема вот в чём: когда выполнение кода доходит до 163 строки, появляется ошибка: &quot; HEAP CORRUPTION DETECTED: after...

HEAP CORRUPTION DETECTED
Доброго времени суток, господа. Только начал изучать ООП и столкнулся с проблемой. Нужно написать класс, содержащий строку символов,...

Heap Corruption Detected
Выдает ошибку HEAP CORRUPTION DETECTED, судя по всему где то ошиблась с распределением памяти Предполагаю, что ошибка прячется в районе...

Heap corruption detected
Heap corruption на строке 93 при первом же выполнении цикла. Из-за чего? #include &lt;locale.h&gt; // для возможности вывода кириллицы ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru