我在C编码哈希游戏,我正在使用malloc
来分配表的内存。 但是,当我编译程序时,出现了分段错误。 使用debugging器,我能够find一个错误:显然,我不能使用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编译器的代码块。 谢谢你的时间!
这个问题不在你的代码片段中,这很好,主要是。 问题是你没有返回指向调用者的指针! 在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();
你正在初始化将在函数外部使用的东西。 所以你需要更多的间接。 将指针类型更改为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 */ }