在释放指向的数据后重用指针是否安全且可预测?
例如:
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环境中)这是否安全且可预测?
如果这不是"安全且可预测的",那么在两个不同文件上完成相同操作的最佳方法是什么,而不是创建指针数量的两倍,等等?
编辑:我问是否可以在释放指向它后重新使用指针变量.我知道你在释放后不应该使用指针值.假设代码完美运行(它按预期工作,正确释放内存等).我无法改变规格.这项任务.
谢谢!
你正在做的事情很好:因为,在你释放一个指针之后,你会在重复使用它之前重新初始化它.
如果问题是" 释放后重用指针值是否安全",则答案为"否".
如果问题是" 在释放其值后重用指针变量是否安全",则答案为"是,如果在重用之前将其重新初始化为(新的)有效值".