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

Nic*_*sta 11 c memory pointers

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

例如:

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 );
}
Run Code Online (Sandbox Code Playgroud)

*错误检查省略

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

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

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

谢谢!

Chr*_*isW 22

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

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

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