【问题标题】:Use free() for a struct containing array对包含数组的结构使用 free()
【发布时间】:2015-12-05 15:23:10
【问题描述】:
typedef struct Rental {
    int nDays;
    float kmsDriven;
    char carLicensePlate[LICENSE_PLATE_LENGTH+1];
    char *clientName;
    char chargingCategory;
} Rental;

我得到了上层结构,并以这种方式创建了一个指向这些结构的指针数组:

Rental* rentArray[nRent];`

我尝试免费使用它,但rentArray[0] 仍然不是空的。怎么了?

【问题讨论】:

  • 不清楚你在问什么。 1. free() 不会清除作为参数传递的变量,因为它不会接受要清除的变量指针。 2.如果你在释放rentArray[0]之后尝试去引用它,你就错了。不要访问已释放的内存!
  • 如何推断数组元素不正确freed? free 释放内存但没有将释放的指针设置为NULL
  • 我想删除我之前保存在 struct 中的内容。 free() 还不够?
  • 解释Jongware的评论,你怎么知道“例子仍然不是空的”?一旦你释放了内存,你就不能以任何方式可靠地检查它,那么你是如何得出这个结论的呢?在大多数实现中,如果你释放它,数据不会改变,访问它可能看起来什么都没有发生。
  • 尝试使用memset()释放它之前清除结构的内容。

标签: c pointers struct free


【解决方案1】:

释放内存并不意味着清除内存。释放一定范围的内存后,指向它的指针将变为无效。但是,如果其他内存请求不需要,则该范围仍然可以包含以前的数据。

尽管如此,访问这样的范围通常会导致未定义的行为。

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 2011-01-14
    • 1970-01-01
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    相关资源
    最近更新 更多