malloc error when trying to assign the returned pointer to a struct field
bachmeier
no at spam.net
Fri Sep 8 13:06:29 UTC 2023
On Friday, 8 September 2023 at 07:59:37 UTC, rempas wrote:
> 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`!
I've had an error message like that before. This was the answer:
https://stackoverflow.com/questions/46803671/sysmalloc-assertion
Without additional code it's hard to say if that's your problem.
More information about the Digitalmars-d-learn
mailing list