Форум программистов, компьютерный форум CyberForum.ru

glibc detected - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.64
xecu91
3 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 28
09.01.2012, 19:29     glibc detected #1
Хочется узнать, что конкретно означает эта ошибка (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: Вообще было бы круто увидеть простейший пример кода, который инициирует эту ошибку.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.01.2012, 19:29     glibc detected
Посмотрите здесь:

Heap corruption detected C++
HEAP CORRUPTION DETECTED C++
C++ Error detected (LME286)
C++ heap corruption detected
C++ Heap corruption detected
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LosAngeles
Заблокирован
09.01.2012, 19:42     glibc detected #2
Цитата Сообщение от xecu91 Посмотреть сообщение
//program will crash here
должно быть на одну строку выше, указатель то корректный его можно делитить, а это
Цитата Сообщение от xecu91 Посмотреть сообщение
a[0] = a[-1];
попахивает #PF, хочешь крэша потыкай в другие адреса, а насчёт ошибки даже не знаю, лень гуглить но мне кажется ты это из контекста выдрал "glibc detected" переводится как "glibc обнаружен" очень странное название для ошибки, вообще в POSIX системе тебе должен sigsegv приплыть
xecu91
3 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 28
09.01.2012, 19:51  [ТС]     glibc detected #3
LosAngeles, SIGSEGV приплывает при выходе за пределы страницы памяти, адрес a[-1] лежит в нашей странице и ничего страшного не происходит с точки зрения сегментирования.
LosAngeles
Заблокирован
09.01.2012, 20:05     glibc detected #4
ну значит программа правильная, держи конфетку
xecu91
3 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 28
09.01.2012, 20:09  [ТС]     glibc detected #5
я вообще ожидал увидеть что-то вроде этого
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]
Аварийный останов
LosAngeles
Заблокирован
09.01.2012, 20:17     glibc detected #6
ясно, ну за эту программу можешь не переживать, всё выделяется удаляется корректно
xecu91
3 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 28
09.01.2012, 20:19  [ТС]     glibc detected #7
Ну это я и сам вижу, а надо, чтобы прога падала =) какой простейший пример программы, инициирующий эту ошибку?
LosAngeles
Заблокирован
09.01.2012, 20:24     glibc detected #8
Цитата Сообщение от xecu91 Посмотреть сообщение
a[0] = a[-1];
a = -1;
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
09.01.2012, 20:29     glibc detected #9
можт имелось в виду чтонить вроде
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
}
xecu91
3 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 28
09.01.2012, 20:33  [ТС]     glibc detected #10
Цитата Сообщение от LosAngeles Посмотреть сообщение
a = -1;
не скомпилируется, invalid conversion from int to double* (или double to double*)

alex_x_x,
Нет, не это, такая ошибка возникает и в одномерных массивах, по вызову delete.
LosAngeles
Заблокирован
09.01.2012, 20:41     glibc detected #11
Цитата Сообщение от xecu91 Посмотреть сообщение
не скомпилируется, invalid conversion from int to double* (или double to double*)
приведи к нужному типу и скомпилируй, не вижу проблемы
xecu91
3 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 28
09.01.2012, 20:45  [ТС]     glibc detected #12
LosAngeles, упадёт с Segmentation Fault, т.к. адрес (double*)(-1) на другой странице лежит. Нужно поймать другую ошибку.
NoMasters
Псевдослучайный
1737 / 1080 / 69
Регистрация: 13.09.2011
Сообщений: 3,093
09.01.2012, 21:17     glibc detected #13
О чём вы, человечки? Сегфолт может состоятся не раньше, чем по разыменованному адресу будет попытка чтения/записи. А ошибка glibc вылезает из-за попытки освободить адрес, на который ничего не выделялось.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 320
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
10.01.2012, 09:25     glibc detected #14
Цитата Сообщение от xecu91 Посмотреть сообщение
Вообще было бы круто увидеть простейший пример кода, который инициирует эту ошибку
Второй пример в конце данного поста: http://www.cyberforum.ru/cpp-experts...ml#post1671703
Если я правильно понял, чего надо
fasked
10.01.2012, 11:58
  #15

Не по теме:

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

Evg
10.01.2012, 12:08
  #16

Не по теме:

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

nxnx
10.01.2012, 12:10
  #17

Не по теме:

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

fasked
10.01.2012, 12:11
  #18

Не по теме:

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

xecu91
3 / 3 / 0
Регистрация: 09.01.2012
Сообщений: 28
10.01.2012, 16:03  [ТС]     glibc detected #19
В примере 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 - непонятно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2012, 16:26     glibc detected
Еще ссылки по теме:

C++ Heap Corruption detected (
C++ Heap corruption detected
Heap corruption detected C++

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

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 320
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
10.01.2012, 16:26     glibc detected #20
Вот тебе исходники от 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;
}
принципиальной разницы нет
Yandex
Объявления
10.01.2012, 16:26     glibc detected
Ответ Создать тему
Опции темы

Текущее время: 04:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru