我是D语言的新手.在尝试创建一个返回字节数组的简单函数时,我在尝试返回值时遇到错误.是否有一种不同的方式我应该从函数返回一个局部变量?
在返回线上,我收到错误 Error: escaping reference to local c
我的代码:
byte[] xorFixed(byte[] a, byte[] b){
if (a.sizeof != b.sizeof) return null;
byte[a.sizeof] c;
for (int i = 0; i < a.sizeof; i++)
{
c[i] = (a[i] ^ b[i]);
return c;
}
Adam D. Rupp.. 5
byte[]
并且byte[some_size]
是两种不同的类型.A byte[some_size]
是在使用时复制的静态数组,a byte[]
是指向其值的切片或动态数组.
当你尝试时return c
,由于返回值是一个切片,它会尝试获取指向c
... 的指针,这是一个在函数返回时不再存在的本地值.如果这个编译,它会在运行时给你乱码或崩溃!
你需要修复类型.c
应该不会是byte[a.sizeof]
.它应该是一个平原byte[]
.要设置数组的大小,请使用.length
而不是.sizeof
.
if (a.length != b.length) return null; // changed sizeof -> length
byte[] c; // changed type
c.length = a.length; // this sets the length of c to match a
for (int i = 0; i < a.length; i++) // changed sizeof to length
这将做你想要的.
byte[]
并且byte[some_size]
是两种不同的类型.A byte[some_size]
是在使用时复制的静态数组,a byte[]
是指向其值的切片或动态数组.
当你尝试时return c
,由于返回值是一个切片,它会尝试获取指向c
... 的指针,这是一个在函数返回时不再存在的本地值.如果这个编译,它会在运行时给你乱码或崩溃!
你需要修复类型.c
应该不会是byte[a.sizeof]
.它应该是一个平原byte[]
.要设置数组的大小,请使用.length
而不是.sizeof
.
if (a.length != b.length) return null; // changed sizeof -> length
byte[] c; // changed type
c.length = a.length; // this sets the length of c to match a
for (int i = 0; i < a.length; i++) // changed sizeof to length
这将做你想要的.