[英]Scope of variably sized array
這總是能按預期運行嗎?
char *x;
if (...) {
int len = dynamic_function();
char x2[len];
sprintf(x2, "hello %s", ...);
x = x2;
}
printf("%s\n", x);
// prints hello
編譯器(在我的情況下為GCC)如何在C和C ++中的每一個中實現大小可變的數組?
否x2
在if
語句的作用域內是局部的,您可以使用指針在它之外訪問它。 這導致不確定的行為。
順便說一下,VLA在C11中已成為可選屬性,並且從未成為C ++的一部分。 因此最好避免這種情況。
否,原因有兩個:
C ++:該代碼不是有效的C ++。 C ++中的數組必須具有編譯時常量大小。
C:否,因為數組僅生存到聲明它的塊的末尾,因此取消引用x
是未定義的行為。
從C11,6.2.4 / 2:
如果在其生存期之外引用對象,則行為是不確定的。
6.2.4 / 7表示可變長度數組從聲明開始一直到其封閉范圍的結尾:
對於確實具有可變長度數組類型的對象,其生存期從對象的聲明開始,直到程序執行離開聲明的范圍為止。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.