Luk*_*uke 2 c c++ gcc dynamic-arrays
以下代码使用堆:
char* getResult(int length) {
char* result = new char[length];
// Fill result...
return result;
}
int main(void) {
char* result = getResult(100);
// Do something...
delete result;
}
Run Code Online (Sandbox Code Playgroud)
因此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...
}
Run Code Online (Sandbox Code Playgroud)
假设result
在这种情况下仍然在堆栈上分配,我是否正确?
是result
副本,还是垃圾内存的引用?以上代码是否安全?
假设在这种情况下仍然在堆栈上分配结果,我是否正确?
正确.VLA具有自动存储持续时间.
结果是副本,还是垃圾内存的引用?以上代码是否安全?
代码不安全.返回的地址getResult
是无效的地址.取消引用指针会调用未定义的行为.
归档时间: |
|
查看次数: |
308 次 |
最近记录: |