我正在测试示例代码,如下所示,为什么在linux ubuntu 16-4上编译时收到警告?
~/c$ gcc malloc.c
malloc.c: In function ‘main’:
malloc.c:17:14: warning: assignment makes pointer from integer without a cast [-Wint-conversion]
if(number= malloc(50*sizeof(int) )== NULL)
这是我的代码:
#include "stdlib.h"
#include "stdio.h
我的程序是死锁的,下面是死锁的前4帧:
#0 __lll_lock_wait_private () at ../nptl/sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:97
#1 0x00007f926250b7aa in _L_lock_12502 () at malloc.c:3507
#2 0x00007f926250a2df in malloc_atfork (sz=12, caller=<value optimized out>) at arena.c:217
#3 0x00007f926250881a in __li
GDB能否检测到调用堆栈溢出,通常在无限递归bug中,并打印一些很好的错误和上下文消息,而不是下面给出的代码,这对于新手来说很难理解,对我们所有人都很不方便。在这种情况下,如果GDB可以通过检查所涉及的(成员-)函数或变量指针中的重复模式来检测无限递归循环中涉及的对象(指针),则将是超级酷。我在Ubuntu上使用gdb-7.3-dev。产出如下:
Program received signal SIGSEGV, Segmentation fault.
0x008577e9 in _int_malloc (av=0x9483c0, bytes=4) at malloc.c:4249
4249
我只是在看一份交换声明:
case RoutingMessage::FWDMESSAGE:
{
//Message Format:
//@FromNode~12~DestNode.from x to y hops .<the message>
int destID;
string changableStr, finalMessage;
string buf(iter->second);
如何在gdb中包含/查看malloc的源代码?
我希望在gdb中一步一步地执行,并在调用任何malloc函数时逐步进入malloc.c源代码。
目前gdb说的是:malloc.c: No such file or directory.
这里的家伙也面临着同样的问题,但是他们没有提到一个解决方案,即如何真正进入malloc的源代码。
我在Ubuntu server 14.04上,我已经尝试安装以下程序:libc6-dbg、libc6-dev和libc6-dbgsym。我甚至不知道这些包中的一个是否有帮助,但是安装libc-dbgsym会给出以下错误:
dpkg: error processing
我想学习如何创建一个更有效的malloc,我发现了这个项目。我可以运行make编译它:
$ make tstmalloc
make: `tstmalloc' is up to date.
但我如何运行和测试它呢?我阅读了自述文件,但它不够详细。我想编译所有的程序,测试所有的程序,了解这些程序的作用。但如果我跑了,那它就会以一种我不明白的方式抱怨:
$ make
gcc -g -Wall -ansi -DSTRATEGY=2 -c -o malloc.o malloc.c
malloc.c: In function ‘morecore’:
malloc.c:77:3: warni
我的程序出现了分段故障,我找不到原因。最糟糕的是,所讨论的函数并不总是导致segfault。
GDB确认错误并生成以下回溯:
Program received signal SIGSEGV, Segmentation fault.
0xb7da6d6e in malloc_consolidate (av=<value optimized out>) at malloc.c:5169
5169 malloc.c: No such file or directory.
in malloc.c
(gdb) bt
#0 0xb7da6d6e in malloc_consolidat
因为我认为在我的代码中会出现一些内存错误,所以在众多输入中,只有一个free(ptr)失败。我遇到的一个错误消息是:
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
pspmxm: malloc.c:3551: munmap_chunk: Assertion `ret == 0' failed.
Program received signal SIGABRT, Aborted.
0x00007ffff6f9d475 in *__GI_raise (sig=<op
我想运行单元测试与谷歌测试,但得到分段故障。我刚刚定义了一个全局常量字符串和RUN_ALL_TESTS,为什么?
gdb结果为:
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[==========] Running 0 tests from 0 test cases.
[==========] 0 tests from 0 test cases ran. (1 ms total)
[
我有一个用户级别的线程库,我更改了一个基准程序,使用mythread而不是pthread,但它总是卡在代码中有malloc或free函数的地方。
这是gdb的输出:
^C
Program received signal SIGINT, Interrupt.
__lll_lock_wait_private ()
at ../sysdeps/unix/sysv/linux/x86_64/lowlevellock.S:95
95 ../sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: No such file or directory.
(gdb
有一个由我的程序引起的核心部分,如下所示:
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/libthread_db.so.1".
Core was generated by `./remote_speaker plug:SLAVE='dmix:tlv320aic3106au' default rtmp://pili-publish.'.
Program terminated with signal SIGABRT, Aborted.
我正在编写第一个关于Coursera算法的编程作业:设计和分析课程( )。它涉及使用合并排序来计数倒置( )。我认为这是一个相对不需要思考的问题,因为我以前曾遇到过合并排序(在学校)。
#include <iostream>
#include <fstream>
using namespace std;
int *half(int *array, int n, int start, int end)
{
/*
* Creates a new array which contains elements from ''array
我正在用C编写一个散列游戏,并使用malloc来为表分配内存。但是,当我编译程序时,我会得到一个分段错误。使用调试器,我找到了一个错误:显然,我不能使用malloc,因为它找不到malloc.c或类似的东西。下面是代码(发生分段错误的地方):
int inicializaTabuleiro(char *ptrTabuleiro)
{
//Aloca memória para o tabuleiro
ptrTabuleiro = malloc(9);
//Verifica se a memória foi alocada
if(!ptrTabuleiro)
我对在glibc中实现的malloc_trim的行为感到困惑。
man malloc_trim
[...]
malloc_trim - release free memory from the top of the heap
[...]
This function cannot release free memory located at places other than the top of the heap.
当我现在查找malloc_trim()的源(在malloc/malloc.c中)时,我看到它调用了mtrim(),它利用madvise(x, MADV_DONTNEED)将内存释放
我在glibc中工作,我需要获取当前线程的id。对于这个我使用syscall(SYS_gettid);的问题是,我被迫包括bits/syscall.h而不是理想的情况,即sys/syscall.h。
sys/syscall.h在内部调用bits/syscall.h,但这是用#ifndef _LIBC宏包装的。i.e
#ifndef _LIBC
/* The Linux kernel header file defines macros `__NR_<name>', but some
programs expect the tr
下面给出了导致分段错误的代码部分。
ifstream xiFileId(xifile, ios::binary); //xifile is a char *
//the ii_t class in the following line is taken from http://stackoverflow.com/questions/1855704/c-binary-file-i-o-to-from-containers-other-than-char-using-stl-algorithms written by http://stackoverflow.com/users/14065/l
我正在尝试调试一个C程序,而gdb告诉我某个函数的第329行有一个段错误。因此,我为该函数设置了一个断点,并尝试逐步执行它。然而,每当我访问第68行时,我都会收到来自gdb的抱怨:
(gdb) step
68 next_bb = (basic_block *)malloc(sizeof(basic_block));
(gdb) step
*__GI___libc_malloc (bytes=40) at malloc.c:3621
3621 malloc.c: No such file or directory.
in malloc.c
我不知道这是什么意思。程