当前位置:  开发笔记 > 运维 > 正文

在释放指向它们的内容后重用指针变量是否安全?

如何解决《在释放指向它们的内容后重用指针变量是否安全?》经验,为你挑选了1个好方法。

在释放指向的数据后重用指针是否安全且可预测?

例如:

char* fileNames[] = { "words.txt", "moreWords.txt" };
char** words = NULL;
int* wordsCount = NULL;
for ( i = 0; i < 2; ++i ) {
    data = fopen( fileNames[i], "r" );
    words = readWords( data );
    wordsCount = countWords( words );

    free( wordsCount );
    for ( j = 0; words[j]; ++j )
        free( words[j] );
    free( words );
    fclose( data );
}

*错误检查省略

我正在运行代码,它似乎运行(没有警告,错误或内存问题),但我想知道在大多数环境中(特别是在典型的Linux环境中)这是否安全且可预测?

如果这不是"安全且可预测的",那么在两个不同文件上完成相同操作的最佳方法是什么,而不是创建指针数量的两倍,等等?

编辑:我问是否可以在释放指向它后重新使用指针变量.我知道你在释放后不应该使用指针.假设代码完美运行(它按预期工作,正确释放内存等).我无法改变规格.这项任务.

谢谢!



1> ChrisW..:

你正在做的事情很好:因为,在你释放一个指针之后,你会在重复使用它之前重新初始化它.

如果问题是" 释放后重用指针是否安全",则答案为"否".

如果问题是" 在释放其值后重用指针变量是否安全",则答案为"是,如果在重用之前将其重新初始化为(新的)有效值".

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有