当前位置:  开发笔记 > 编程语言 > 正文

转义对局部变量的引用

如何解决《转义对局部变量的引用》经验,为你挑选了1个好方法。

我是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

这将做你想要的.



1> Adam D. Rupp..:

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

这将做你想要的.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有