调试器:"无法打开文件:malloc.c"

时间:2016-12-08 23:25:56

标签: c linux malloc

我在C中编写哈希游戏,我使用malloc来为表格分配内存。但是,当我编译程序时,我遇到了分段错误。使用调试器我能够找到一个错误:显然,我不能使用malloc,因为它无法找到malloc.c或类似的东西。这是代码(发生段错误的地方):

int inicializaTabuleiro(char *ptrTabuleiro)
{
    //Aloca memória para o tabuleiro
    ptrTabuleiro = malloc(9);

    //Verifica se a memória foi alocada
    if(!ptrTabuleiro)
        return 0;

    int contadorPosicao;

    //Preenche o tabuleiro com '-'
    for(contadorPosicao = 0; contadorPosicao < 9; contadorPosicao++)
            ptrTabuleiro[contadorPosicao] = '-';

    return 1;
}

对可能导致什么的任何想法?附加信息:在Linux Mint上使用带有GCC编译器的代码块。谢谢你的时间!

2 个答案:

答案 0 :(得分:4)

问题不在您的代码段中,这很好,主要是。问题是你没有将指针返回给调用者!在C中,参数按值传递,因此如果您执行以下操作:

char *arr;
mycharalloc(arr);
arr[3] = 'X'; /* <-- arr is still uninitialized! */

mycharalloc使用其本地arr副本来存储新创建的指针,但调用者arr内部未受影响。因此,arr是一个随机指针,下次你写一些东西时,你会得到段错误。

我建议您将功能更改为:

char *inicializaTabuleiro()
{
    //Aloca memória para o tabuleiro
    char *ptrTabuleiro = malloc(9);

    //Verifica se a memória foi alocada
    if(!ptrTabuleiro)
        return NULL;

    int contadorPosicao;

    //Preenche o tabuleiro com '-'
    for(contadorPosicao = 0; contadorPosicao < 9; contadorPosicao++)
            ptrTabuleiro[contadorPosicao] = '-';

    return ptrTabuleiro;
}

然后在来电者中:

char *myTable = inicializaTabuleiro();
if (!myTable)
    error();

答案 1 :(得分:2)

您显然正在初始化将在函数外部使用的内容。所以你需要一个更多级别的间接。将指针类型更改为char**

int inicializaTabuleiro(char **ptrTabuleiro)
{
    //Aloca memória para o tabuleiro
    *ptrTabuleiro = malloc(9);

    //Verifica se a memória foi alocada
    if(!*ptrTabuleiro)
        return 0;

    int contadorPosicao;

    //Preenche o tabuleiro com '-'
    for(contadorPosicao = 0; contadorPosicao < 9; contadorPosicao++)
            (*ptrTabuleiro)[contadorPosicao] = '-';

    return 1;
}

并且这样打电话:

char *ptrTabuleiro;
if( inicializaTabuleiro( &ptrTabuleiro ) )
{
    /* now you can use ptrTabuleiro */
}
相关问题