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

Rap*_*uer 2 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;
}
Run Code Online (Sandbox Code Playgroud)

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

Unr*_*gle 5

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

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

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;
}
Run Code Online (Sandbox Code Playgroud)

然后在调用者中:

char *myTable = inicializaTabuleiro();
if (!myTable)
    error();
Run Code Online (Sandbox Code Playgroud)