标签: glibc

glibc检测到双重免费或腐败

我有一个glibc检测到的问题.我已经研究了解决这个问题的方法,但似乎正确的解决方案是释放我分配的任何东西.但是,即使我这样做,我仍然会在输出屏幕上收到内存映射打印.

class TestDepth{
    gameStatus temp;
public:
    TestDepth(gameStatus &currentGameState)
    {
        temp = currentGameState;

        free(&temp);
    }
};
Run Code Online (Sandbox Code Playgroud)

我放置temp=currentGameState线时只会出现此错误.但是一旦我发表评论,它就可以了.

c++ glibc

0
推荐指数
1
解决办法
841
查看次数

pthread_cond_timedwait提前一秒返回

下面的程序产生这个输出:

$ ./test_condvar 9000
1343868189.623067126 1343868198.623067126 FIRST
1343868197.623132345 1343868206.623132345 TIMEOUT
1343868205.623190120 1343868214.623190120 TIMEOUT
1343868213.623248184 1343868222.623248184 TIMEOUT
1343868221.623311549 1343868230.623311549 TIMEOUT
1343868229.623369718 1343868238.623369718 TIMEOUT
1343868237.623428856 1343868246.623428856 TIMEOUT
Run Code Online (Sandbox Code Playgroud)

请注意,pthread_cond_timedwait跨行读取显示预期9秒的时间增量,但是向下读取列显示在8秒内返回ETIMEDOUT.

pthread lib是glibc 2.12.运行Red Hat EL6.uname -a节目2.6.32-131.12.1.el6.x86_64 #1 SMP Tue Aug 23 11:13:45 CDT 2011 x86_64 x86_64 x86_64 GNU/Linux

它看起来像pthread_cond_timedwait依赖于lll_futex_timed_wait超时行为.

关于在哪里搜索解释的任何想法?

#include <time.h>
#include <sys/time.h>
#include <pthread.h>
#include <errno.h>
#include <stdlib.h>
#include <stdio.h>

int main ( int argc, char *argv[] )
{
    pthread_mutexattr_t mtx_attr;
    pthread_mutex_t mtx; …
Run Code Online (Sandbox Code Playgroud)

linux glibc pthreads

0
推荐指数
1
解决办法
2117
查看次数

"GNU libs vs Gnulib vs Gnome glib"令人困惑

我对开发人员和用户点的这些术语感到有些困惑.例如,我在Ubuntu上.

  1. GNU libs(https://www.gnu.org/software/libc/)默认安装,gnulib(https://www.gnu.org/software/gnulib)不是,对吧?
  2. GNU libs遵循POSIX stadard,但是:http://www.gnu.org/software/libc/manual/html_mono/libc.html#POSIX-Threads, 所以看起来,例如,pthread_create这里没有实现并实现Gnulib,对吧?
  3. Gnome glib只是第3个图书馆,对吗?但它基于GNU libsGnulib?还有其他类似的图书馆吗?

谢谢.

c gnu glibc glib

0
推荐指数
1
解决办法
868
查看次数

glibc函数返回什么样的值需要free()d?

我们知道所有动态分配的内存需要由程序员自己使用free()释放.对于程序员自己创建的变量并为他们分配内存几乎没有问题,因为他知道要调用free()的内容.但是从glibc函数返回的指针如getenv()呢.起初我以为我需要释放getenv()结果所指向的内存,但后来注意到那个男人说:

通常实现时,getenv()返回指向环境列表中的字符串的指针.调用者必须注意不要修改此字符串,因为这会改变进程的环境

这意味着函数getenv()没有调用malloc()来为地址返回的字符串创建一个新空间.那么明确需要释放从这些函数返回的哪些指针?

c c++ glibc

0
推荐指数
1
解决办法
80
查看次数

应用程序 RPM 安装错误:libc.so.6 is required by ....

我有一个应用程序 rpm,安装时无法安装并出现错误

error: Failed dependencies:
        libc.so.6 is needed by testSam-4.7.x86_64
        libc.so.6(GLIBC_2.0) is needed by testSam-4.7.x86_64
        libc.so.6(GLIBC_2.1) is needed by testSam-4.7.x86_64
Run Code Online (Sandbox Code Playgroud)

该系统具有 RHEL 7.3 和 glibc 2.17。

# cat /etc/redhat-release 
Red Hat Enterprise Linux Server release 7.3 (Maipo)

# rpm -qf /lib64/libc.so.6
glibc-2.17-157.el7.x86_64
Run Code Online (Sandbox Code Playgroud)

因此,使用较旧的 glibc(它需要 2.0 和 2.1 之间的 glibc)构建的应用程序无法在具有较新 glibc 2.17 的系统上运行。

如何摆脱这个问题并在具有较新 glibc 的系统上运行应用程序?我想有一些 glibc 向后兼容包可以帮助我们在具有较新 glibc 的系统上运行此类应用程序。从哪里可以下载此类兼容包?

glibc rhel7

0
推荐指数
1
解决办法
1万
查看次数

TLS 数据在所有线程中寻址相同

glibc-2.27使用GDB. 在178in行sysdeps/unix/sysv/linux/getsysstats.c,存在一个thread local storage访问,如下图:

while (l < re && isspace (*l))
Run Code Online (Sandbox Code Playgroud)

IIUC,isspace()似乎访问了一个字符映射到符号类型的 ,以快速确定当前字符是否为空格。这张桌子似乎是一个. 相关拆解如下: ASCIITLS

0x7f8f9ef480de <__GI___get_nprocs+318>  mov    0x2cbd1b(%rip),%rax        # 0x7f8f9f213e00                                                                        
0x7f8f9ef480e5 <__GI___get_nprocs+325>  mov    %fs:(%rax),%rdi                                                                                                    
Run Code Online (Sandbox Code Playgroud)

rax包含0xffffffffffffff98,其中,IIUC,表示地址,对于每个线程,使用以下等式计算:$fs_base + 0xffffffffffffff98。当我使用这个等式来查找每个线程的表地址时,它们都返回相同的0x00007f8f9732b82c。这如下所示:

(gdb) thread apply all x/2x $fs_base + 0xffffffffffffff98

Thread 47 (Thread 22457.22471):
0x7f8f75dfc698: 0x9732b82c  0x00007f8f

Thread 46 (Thread 22457.22470): …
Run Code Online (Sandbox Code Playgroud)

assembly linker gdb glibc thread-local-storage

0
推荐指数
1
解决办法
54
查看次数

双重免费 - 崩溃或没有崩溃

有人可以解释一下为什么连续两次释放导致崩溃,但释放第一个,然后是b,然后再次不会崩溃?

我知道free会将堆块插入双链接空闲列表中.释放两次会在空闲列表中两次插入相同的块.但为什么崩溃发生?

int *a = malloc(8);
int *b = malloc(8);

free(a);

// free(a); //Would crash!

free(b);

free(a); //No crash
Run Code Online (Sandbox Code Playgroud)

c linux exploit glibc

-1
推荐指数
1
解决办法
502
查看次数

尝试使用 sbrk 减少数据段大小时在 glibc 中中止

在使用 glibc 时,我尝试使用sbrk使用负参数来减少数据段,并发现了一个最奇怪的行为。

\n

我首先使用malloc,然后free使用它,然后使用 减少数据段sbrk,然后malloc再次使用与第一个相同的大小。

\n

问题是,如果malloc大小(两个malloc大小相同)足够小(32k,或八个 4k 页),那么一切都可以正常工作。但是当我增加一点malloc- free-malloc大小(到九个 4k 页)时,我会得到核心转储。更奇怪的是,当我将大小提高malloc到超过mmap阈值(128k)时,我会得到调整中止行为。

\n

C代码:

\n
#define _GNU_SOURCE 1\n#include <stdio.h>\n#include <malloc.h>\n#include <unistd.h>\n\n// set MMAP_ALLOC_SIZE to 8 4k-pages it will work, \n// set it to 9 4k-pages it raises a \'segmentation fault (core dumped)\'\n// set it to 33 4k-pages it raises a \'break adjusted to free malloc space\' …
Run Code Online (Sandbox Code Playgroud)

gcc mmap glibc heap-memory sbrk

-1
推荐指数
1
解决办法
608
查看次数

哪个 libc 时间给了我一天中的时间?

软呢帽 33 乐

我想用 NativeCall 与 lic.so.6 交谈,以我正在编写的示例为例。我已经找到

但我不知道哪一个会给我一天中的时间 (21:02:03)

挠我的头,

c glibc raku

-4
推荐指数
1
解决办法
113
查看次数

FORTRAN中的释放和内存分配问题

我遇到了deallocate的问题并分配了部分FORTRAN代码的各个方面.特别是,我认为这个问题与通过搜索我在网络上的错误消息的内存分配有关.错误消息谈论无效指针,但是,我没有在我的程序中使用任何指针

在完成我的f循环的迭代#2(见下文)之后,程序崩溃了,或者大部分时间它崩溃了,有时它只是冻结了.我相信这就是bug的关键所在.因为程序运行到了这一点.

我没有显示子程序,但由于它们适用于其他模拟组合,我有理由相信它们不是问题.我正在使用deallocate并在程序中的其他地方分配(成功)所以我很惊讶它在这里不起作用.

我只是为了便于阅读而展示了该计划的一部分.特别是,我已经删除了对我编写的子程序的调用.我希望我已经为你的程序员提供了足够的信息来帮我解决问题.如果没有,请说明您想要的其他信息,我将很乐意遵守.我已经使用各种编译器选项编译了程序,并修复了一些错误并删除了任何警告.但是,此时,编译器选项不再向我提供任何信息.

allocate(poffvect(1:6))
allocate(phi1out(1:1))
allocate(phi2out(1:1))
allocate(phi1outs1(1:1))
allocate(phi2outs1(1:1))

     dummy allocation
   allocate(phi1outind(1:1))
   allocate(phi2outind(1:1))
   allocate(phi1outinds1(1:1))
   allocate(phi2outinds1(1:1))

   do e = 1, 6
     print *,"e", e
     do f = 1, 3

       print *,"f", f, iteratst1(f), trim(filenumcharimp)

       deallocate(phi1outinds1, STAT = AllocateStatus)
     if (AllocateStatus /= 0) stop "Error during  deallocation of phi1outinds1"
     print *, "Allocatestatus of phi1outinds1 is",  AllocateStatus
     deallocate(phi2outinds1, STAT = AllocateStatus)
    print *, "DeAllocatestatus of phi1outinds2 is", AllocateStatus

     if (AllocateStatus /= 0) stop "Error during deallocation of phi2outinds1"
    print *, "we deallocate f …
Run Code Online (Sandbox Code Playgroud)

fortran memory-management glibc double-free

-5
推荐指数
1
解决办法
1万
查看次数

我不知道在C中'检测到'glibc'

当我结束我的程序时,我发现了'glibc detected'这样的消息.但是,我不知道这是错误还是警告,否则..有人可以解释一下这条消息的含义以及我该怎么办?

在此输入图像描述

c unix glibc

-5
推荐指数
1
解决办法
7160
查看次数