重新初始化以前"释放"的指针

  • 本文关键字:释放 指针 初始化 cs50
  • 更新时间 :
  • 英文 :


我目前正在学习CS50的Lab 4 - Volume。我有下面的代码,我想知道它是否可以使用相同的指针名称在两个不同的地方调用自由后。

//Initialize tmp pointer and copy header bytes from input to output file
uint8_t *tmp = malloc(sizeof(uint8_t));
if (*tmp == NULL)
{
printf("Mem_ERR_2n");
return 2;
}
for (int b = 0; b < 44; b++)
{
*tmp = fgetc(*input);
*output = fputc(*tmp);
printf("H_BYTE = %in", b++);
}
free(*tmp);

我初始化了*tmp,解引用了它,现在我对它调用free。在此之后,我想为代码的不同部分创建第二个*tmp指针。我的问题是,它是好的做法,甚至在语法上可以初始化uint16_t *tmp为第二个指针?还是改成*tmp1*tmp2?

首先,*tmp == NULL行是一个错误。如果malloc失败并返回NULL,则计算表达式*tmp将导致分段错误。相反,试试tmp == NULL。这也意味着free(*tmp)是一个bug——它应该是free(tmp)

现在,回答你的问题:在指针变量被释放后重新赋值是完全可以的。例如,以下是完全有效的:

int * ptr = malloc(16);
free(ptr);
int x = 5;
ptr = &x;
ptr = malloc(16);
free(ptr);

相关内容

  • 没有找到相关文章

最新更新