0

私は今、このコードについて混乱しています。

int flag = 1;
struct {
    char * data;
}
neco;
if(flag) {
    neco.data = "index.html";
}
// insert code here...
std::cout << neco.data;
}

「if」ブロックの後にneco.dataを印刷したり、「if」ブロックの終了後にブロックが「クリーニング」された場合に内部に割り当てられたメモリを印刷したりしても安全ですか?

4

2 に答える 2

5

「if」ブロックの後にneco.dataを印刷したり、「if」ブロックの終了後にブロックが「クリーンアップ」された場合にメモリが内部に配置されたりするのは安全ですか?

文字列リテラルがスコープから外れることはありません。プログラム自体がその範囲です。

us2012がコメントで述べたように、neco.dataが初期化されていることを確認するか、そのブランチが取得されなかった場合は絶対に使用しないようにする必要があります。

于 2013-02-28T07:37:26.397 に答える
0

「if」ブロックの後にneco.dataを印刷すること、または「if」ブロックの終了後にブロックが「クリーニング」された場合に内部に割り当てられたメモリは安全ですか?

問題の文字列リテラル は"index.html"、ブロックの終わりを過ぎても存在し続けるifため、この点でコードは問題ありません。

于 2013-02-28T07:37:53.650 に答える