我正在用 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 编译器的代码块。谢谢你的时间!
问题不在你的代码片段中,这很好,主要是。问题是您没有将指针返回给调用者!在 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)
| 归档时间: |
|
| 查看次数: |
3307 次 |
| 最近记录: |