sysmalloc 的 malloc 错误
malloc error with sysmalloc
我的 C 程序出现以下消息错误:
a.out: malloc.c:2369: sysmalloc: Assertion `(old_top ==
(((mbinptr)(((char *) &((av)->bins[((1) - 1) * 2])) -
__builtin_offsetof (struct malloc_chunk, fd))))&& old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof
(struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) &
~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) &&
((unsigned long)old_end & pagemask) == 0)' failed.
zsh: abort
(core dumped) ./a.out
此错误已出现 (here),内存已损坏。但是谁能告诉我我的程序中是什么导致了这个错误? (第一次调用strdup时程序崩溃)
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
char **cp_env(char **env)
{
int i;
char **my_env;
// Count env size
i = 0;
while (env[i])
i++;
// Malloc env copy
if (!(my_env = (char**)malloc(sizeof(char*) * i)))
exit(-1);
my_env[i] = NULL;
// copy env
while (i--)
my_env[i] = strdup(env[i]);
return(my_env);
}
int main(int ac, char **av, char **env)
{
char** my_env;
my_env = cp_env(env);
printf("%s", my_env[0]);
// free
return (0);
}
我认为,您遇到的问题是
my_env[i] = NULL;
这是一对一的差距。可以使用的最大索引是
my_env[i-1] = NULL;
此外,请 see why not to cast malloc()
的 return 值和 C
中的家人。
我的 C 程序出现以下消息错误:
a.out: malloc.c:2369: sysmalloc: Assertion `(old_top == (((mbinptr)(((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd))))&& old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' failed.
zsh: abort (core dumped) ./a.out
此错误已出现 (here),内存已损坏。但是谁能告诉我我的程序中是什么导致了这个错误? (第一次调用strdup时程序崩溃)
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
char **cp_env(char **env)
{
int i;
char **my_env;
// Count env size
i = 0;
while (env[i])
i++;
// Malloc env copy
if (!(my_env = (char**)malloc(sizeof(char*) * i)))
exit(-1);
my_env[i] = NULL;
// copy env
while (i--)
my_env[i] = strdup(env[i]);
return(my_env);
}
int main(int ac, char **av, char **env)
{
char** my_env;
my_env = cp_env(env);
printf("%s", my_env[0]);
// free
return (0);
}
我认为,您遇到的问题是
my_env[i] = NULL;
这是一对一的差距。可以使用的最大索引是
my_env[i-1] = NULL;
此外,请 see why not to cast malloc()
的 return 值和 C
中的家人。