を失敗しました。私は最近Cを学習し、いくつかのアプリケーションを書いていた始めた、私は私が前に見たことがないとされ、私はここでC:mallocのアサーション
malloc.c:2394: Assertion (old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0) failed. Aborted (core dumped)
をmallocingていたときに明らかになっていますがそれはこのエラーを取得していますコードスニペット
typedef struct {
Node *root;
pthread_id id;
pid_t tid;
}Thread;
typedef struct {
Thread **thread;
int cap, len;
}arr;
static __thread Thread *self = NULL;
pthread_mutex_t lock;
static arr p;
static void
foo (void)
{
pthread_mutex_lock(&lock);
Thread **newthread;
if (p.len == p.cap){
if (p.cap != 0){
newthread = (Thread **) realloc(p.thread, (1+p.cap)*sizeof(Thread *));
}
else {
newthread = (Thread **)malloc(sizeof(Thread *));
}
if (!newthread){
printf("appendThreadpointer: Error while allocating size\n");
exit(1);
}
p.thread=newthread;
++p.cap;
}
++p.len;
Thread *t = malloc(sizeof(Thread *));
t->tid = syscall(SYS_gettid);
t->root = newNode();
t->id = pthread_self();
p.thread[p.len-1] = t;
self = t;
pthread_mutex_unlock(&lock);
}
誰にもこれが起こっている可能性がある理由を知ることができますか?そして私がtid
フィールドをThread
構造体から削除した場合、それはうまく動作します。tid
フィールドを含めると、このエラーが発生します。
混乱していますが、これについてのお手伝いがあります、ありがとうございます。
'スレッド*トン=のmalloc(はsizeof(スレッド*))に変更する必要があります;' - これは魚に見えます。あなたはスレッドへのポインタのためのスペースを割り当てますが、スレッドのためのスペースが必要です: 'Thread * t = malloc(sizeof(Thread));または' Thread * t = malloc(sizeof(* t)); 。 (あなたが得るエラーは、 't'の不足分を割り振って後で境界から書き出すことによって、ダイナミックメモリのCライブラリのハウスホールディングデータを破壊することに関連する可能性があります) –
ああ、そんなに愚かな間違いです。 、ありがとう、 – Nik391