0

この malloc.c アサーション エラーが発生し続けます。他の同様の質問を見てきましたが、解決策が見つからないようです。これは私のコードです...エラーが発生する直前にprintfを配置しました。

int ParseCommand(char *cmd_line, struct command_t *cmd, char **paths)
{
    int argc;
    char **line_ptr;
    char *tmp_name = (char *) malloc(sizeof(MAX_PATH_LEN));

    /* Initialization */
    line_ptr = &cmd_line;
    argc = 0;
    cmd->argv[argc] = (char *) malloc(MAX_ARG_LEN);

    /* Fill argv[] Array */
    while((cmd->argv[argc] = strsep(line_ptr, WHITESPACE)) != NULL) {
        cmd->argv[++argc] = (char *) malloc(MAX_ARG_LEN);
    }

    /* Set The Command Name & argc */
    cmd->argc = argc - 1;
    tmp_name = LookupPath(cmd->argv, paths);

    if(tmp_name == NULL) {
        Fatal("Command Not Found!");
    }
    printf("HERE 4\n");
    cmd->name = (char *) malloc(sizeof(tmp_name));
    strncpy(cmd->name, tmp_name, MAX_PATH_LEN);
    free(tmp_name);
}

エラーは次のとおりです。

smallsh: 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.
Aborted (core dumped)

助けていただければ幸いです。

4

2 に答える 2

0

malloc(sizeof(tmp_name))1 つのポインターを格納するのに十分なスペースを割り当てます。次に、その割り当てにバイトまでコピーしMAX_PATH_LENますが、これは明らかに間違っています。

sizeof(...)を正しいサイズ計算に置き換える必要があります。おそらく1 + strlen(...).

また、の最初のバイトstrncpy内にヌル ターミネータがない場合、デスティネーション バッファはヌル終了しません。これはおそらくバグです。MAX_PATH_LENtmp_name

于 2013-10-23T06:39:20.233 に答える