malloc error when trying to assign the returned pointer to a struct field

rempas rempas at tutanota.com
Fri Sep 8 07:59:37 UTC 2023


I do have the following struct:

```d
struct Vec(T) {
private:
   T* _ptr = null; // The pointer to the data
   u64 _cap = 0;   // Total amount of elements (not bytes) we can 
store

public:
   /* Create a vector by just allocating memory for it. The null 
terminator is not set for
      strings as, the vector is considered empty and we should  
first push something to it
      in order to use it! */
   this(i64 size) {
     this._len = 0;
     this._cap = size;

     static if (is(T == char)) { size += 1; } // Additional space 
for the null terminator
     this._ptr = cast(T*)malloc(size);
   }
}
```

That's some minimal code that I do have just to showcase it. So, 
some times, this work will works, some others, it will give me 
the following error:

`Fatal glibc error: malloc.c:2594 (sysmalloc): assertion failed: 
(old_top == initial_top (av) && old_size == 0) || ((unsigned 
long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned 
long) old_end & (pagesize - 1)) == 0)`

The problem seems to happen when the pointer that is returned 
from `malloc` is assigned to the `_ptr` field. If I just assign 
it to a variable and don't assign anything to `_ptr`, it will 
work!

Is there any possible that there is a compiler bug? I do use ldc2 
and `betterC`!


More information about the Digitalmars-d-learn mailing list