以下代码使用堆:
char* getResult(int length) {
char* result = new char[length];
// Fill result...
return result;
}
int main(void) {
char* result = getResult(100);
// Do something...
delete result;
}
所以result
必须在某处删除,最好由所有者删除。
据我了解,下面的代码使用了一个名为 VLA 的扩展,它是 C99 的一部分,而不是 C++ 标准的一部分(但受到 GCC 和其他编译器的支持):
char* getResult(int length) {
char result[length];
// Fill result...
return result;
}
int main(void) {
char* result = getResult(100);
// Do something...
}
我是否正确假设result
在这种情况下仍然分配在堆栈上?
是result
副本,还是对垃圾内存的引用?上面的代码安全吗?