gpt4 book ai didi

c++ - 退回 VLA 安全吗?

转载 作者:太空狗 更新时间:2023-10-29 23:45:29 31 4
gpt4 key购买 nike

以下代码使用堆:

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 是一个拷贝,还是对垃圾内存的引用?上面的代码安全吗?

最佳答案

Am I correct in assuming that result is still allocated on the stack in this case?

正确。 VLA 具有自动存储期限。

Is result a copy, or is it a reference to garbage memory? Is the above code safe?

代码不安全。 getResult 返回的地址是无效地址。取消引用指针会调用未定义的行为。

关于c++ - 退回 VLA 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18771165/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com