2013-02-28 80 views
0

我現在對此代碼感到困惑。在「if」塊中分配char文字

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

是安全打印neco.data「如果」塊,或內存分配裏面,如果塊被「清洗」後的「如果」塊結束後?

+0

「安全」是什麼意思? – 2013-02-28 07:37:25

+0

這不是C/C++,它是C++。 – 2013-02-28 07:38:03

+0

@Daniel Kamil Kozar:是的代碼是C++,但所有這些語言的問題都是相同的 – Krab 2013-02-28 07:38:42

回答

5

如果塊在「if」塊結束後「清除」,可以安全地在「if」塊之後打印neco.data,還是內存已分配 ?

字符串文字永遠不會超出範圍。程序本身就是它們的範圍。

正如us1212在評論中提到的那樣,您需要確保neco.data被初始化爲或者如果該分支未被採用,則永遠不要使用它。

+0

+1,但我會補充說,由OP提供的代碼可能不安全,因爲'neco.data'未初始化== 0'。 (它目前說'int flag = 1;'但誰知道什麼時候可能會改變... – us2012 2013-02-28 07:42:54

+0

@ us2012好的通話。 – cnicutar 2013-02-28 07:44:22

0

如果在「if」塊結束後塊被「清除」,可以安全地在「if」塊之後打印neco.data,還是內部已分配內存?

在字符串中的問題,"index.html"文字,將繼續存在過去if塊的結尾,所以在這方面的代碼是好的。