【问题标题】:Using a pointer after freeing it using free()使用 free() 释放指针后使用指针
【发布时间】:2011-10-28 08:00:50
【问题描述】:

我遇到以下类型的代码问题:

int* myPointer1 = malloc(50 * sizeof(int));
int* myPointer2 = malloc(50 * sizeof(int));
free(myPointer1);
myPointer1 = myPointer2;
myPointer1[0] = 3;

我遇到了分段错误。有什么问题?

【问题讨论】:

  • 您检查以确保 malloc 操作成功了吗?如果没有,您可能会将 myPointer1 分配给 NULL。
  • 你的段错误在哪里?在free(myPointer1)myPointer1[0] = 3 上?
  • 如果malloc 成功,则应该没有段错误。您所做的只是释放myPointer1 的原始内存位置的内存,然后将myPointer1 重新分配给myPointer2 的位置。但是请注意,如果您要释放最后一位内存,您只需释放其中一个指针(即myPointer1myPointer2),因为它们指向同一个地址。
  • 更多关于使用的编译器和编译器标志的信息会很有帮助。这可能是一个优化器问题。

标签: c pointers segmentation-fault


【解决方案1】:

问题不在此代码中。您发布的 sn-p 似乎是正确的,并且单独工作正常。

【讨论】:

  • 代码 sn-p 是正确的,因为它是正确的,它是不正确的,因为它可以工作,即使使用 UB 也可以很好地工作,并且在人们最不期望的时候爆炸。
  • 我没有说它是正确的,因为它有效——我说它看起来是正确的(例如,它不包含明显的未定义行为),并且它有效(例如,我没有报告分段错误 azphare)。
【解决方案2】:

您的代码是正确的,它们没有任何问题,但是您养成了测试 malloc() 函数的返回值的习惯,如果它是 NULL 则会在您的程序中产生问题,在我们的例子中是 malloc 分配的内存() 函数失败

【讨论】:

    猜你喜欢
    • 2021-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-08
    相关资源
    最近更新 更多