0
私はこのように、1つの自己定義のmalloc()でバックトレース()関数を使用します。backtrace()は無限回帰に入りますか?
void *malloc(size_t size)
{printf("my malloc!\n");
//map_insert
static void *(*mallocp)(size_t size);
char *error;
void *ptr;
void *buffer[100];
int nptrs;
char ptrs_num[10];
memset(ptrs_num, '\0', 10);
char **strings;
printf("1\n");
nptrs = backtrace(buffer, 100);
/* those code below seems useless because problem happens here*/
printf("2\n");
printf("backtrace() returned %d addresses\n", nptrs);
printf("3\n");
strings = backtrace_symbols(buffer, nptrs);
printf("4\n");
if (strings == NULL) {
perror("backtrace_symbols");
exit(1);
}
/*code neglected*/
return ptr;
}
これは、コードの一部は、私の.soファイル内にある、と私はこれを実行していないので、いくつかのバグが存在する可能性があります変更します。私はこのテストコードを使用します。
#include <stdlib.h>
#include <malloc.h>
#include <stdio.h>
int main(int argc, char **argv){
printf("to malloc a!\n");
char *a=(char *)malloc(sizeof(int)*1024);
return 0;
}
私の結果は以下の通りです:
my malloc!
1
my malloc!
1
my malloc!
1
my malloc!
1
my malloc!
1
my malloc!
1
my malloc!
1
my malloc!
1
my malloc!
1
my malloc!
1
my malloc!
1
Segmentation fault
これは、なぜ私は本当に知りません。
バックトレースはちょうど私のmallocをトリガーする理由をいくつかの情報を得るだろうと思いますか?
を 'backtrace'も' malloc'呼び出しますので、あなたは無限再帰を持っているようです。 'printf(" malloc a!\ n ");)の出力もそこにありますか? – mch
デバッガを使用してコードをステップ実行しようとしましたか? –
理由を教えてください:< –