【问题标题】:malloc error with sysmallocsysmalloc 的 malloc 错误
【发布时间】:2015-10-13 12:47:52
【问题描述】:

我的 C 程序出现以下消息错误:

a.out: malloc.c:2369: sysmalloc: 断言`(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)' 失败。

zsh: abort (核心转储)./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);
}

【问题讨论】:

    标签: c malloc


    【解决方案1】:

    我认为,您在

    中遇到了问题
     my_env[i] = NULL;
    

    这是一个接一个。可以使用的最大索引是

    my_env[i-1] = NULL;
    

    另外,请see why not to castmalloc()的返回值和C中的家人。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-08
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      • 2013-11-04
      • 2011-11-05
      • 1970-01-01
      相关资源
      最近更新 更多