gpt4 book ai didi

c++ - CLI 到 native 字节数组的转换

转载 作者:行者123 更新时间:2023-11-30 04:27:08 25 4
gpt4 key购买 nike

这是我将字节数组从 CLI 转换为 native 的变体:

byte* GetNative(array<System::Byte, 1> ^ byteArray) {
try {
pin_ptr<unsigned char> array_pin = &byteArray[0];
return (byte*) array_pin;
}
catch(...) {
return 0;
}
}

我的问题是关于array_pin。我想我需要删除它,但如果我删除它,那么带有我的 byte* 指针的变量将被破坏(或者至少可能被破坏。)

使用这个变体安全吗?或者,我必须如何以及何时删除 array_pin?有没有更简单的方法来实现字节转换?

最佳答案

array_pin 将在超出范围后立即取消固定,例如。当 GetNative 返回时。然后垃圾收集器可能会移动或收集底层托管数组,使您返回的 byte* 悬空,这将在取消引用时导致损坏。

由于 pin_ptr 不能是成员变量并且您不能将它传回函数之外,您需要对非托管数组执行所有操作,同时 array_pin 仍在范围内,或者将数据从固定数组复制到其他地方(例如 std::array)。

关于c++ - CLI 到 native 字节数组的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11119806/

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