我在验证一些包含返回指针的不安全方法的代码时遇到了这个问题.
示例可以表示为:
public class A
{
public static unsafe int* GetAnswer()
{
int fakeValue = 42;
return &(fakeValue);
}
public static void Main()
{
int i = 0;
unsafe { i = *A.GetAnswer(); }
System.Console.WriteLine(i);
}
}
Run Code Online (Sandbox Code Playgroud)
我使用两个单独的验证工具,即ILVerify和Peverify.
重现步骤:
csc example.cs /t:library /unsafepeverify example.dllILVerify.exe -r C:\Windows\Microsoft.NET\Framework64\v4.0.30319\mscorlib.dll example.dll 2.和3.都将导致以下错误消息:
[IL]:错误:[C:\ src\test\example.dll:A :: GetAnswer()] [偏移量0x00000006] [找到Int32的地址]堆栈上的预期数字类型.
[IL]:错误:[C:\ src\test\example.dll:A :: Main()] [offset 0x00000009] [找到Native Int]预期在堆栈上的ByRef.2错误验证C:\ src\test\example.dll
神秘的是,一切都按预期编译和运行,它不会验证.有没有人对这种情况有什么了解?
我有一个问题.我的信念是,它与并发或线程同步有关,尽管我无法理解正在发生的事情.
这是我对FriendRequestList对象的数据流的描述.
从客户端,我们向另一个用户(工作人员)发送朋友请求.所以我们发送请求并将自己的用户名添加到他们的列表中User.incFriendReq.该实例只是一个ArrayList很好的参考.
所以现在我们将请求发送到服务器以接收我们自己的朋友请求列表(FriendRequestList.java).
所以现在问题.如果我在下面使用此代码,则用户在终止其连接(注销)之前将不会看到朋友请求,这将关闭连接.当他登录时,他只会在他的列表中看到该请求.
服务器端代码:
...... Worker.java ......
private Object getFriendRequests() {
User me = Data.getUser(myUserName);
if ( me == null ) {
return new NoSuchUserException(); // Don't worry about it ;)
}
return new FriendRequestList(me.getFriendReq());
}
Run Code Online (Sandbox Code Playgroud)
... User.java ......
private List<String> incFriendReq;
public List<String> getFriendReq() {
return incFriendReq;
}
Run Code Online (Sandbox Code Playgroud)
客户端
... Communication.java ......
public FriendRequestList getRequests() {
sendObject(new GetRequests());
return inputHandler.containsRequests();
}
Run Code Online (Sandbox Code Playgroud)
... MessageListener.java ...
public void run() {
... …Run Code Online (Sandbox Code Playgroud) 我使用java 8 java.time.LocalDate来解析日期.
但是尝试将一个LocalDate对象插入到mongodb中.我在java驱动程序中遇到错误:
private def writeData(measure: DBCollection, installation: Int, date: String, dates: ListBuffer[LocalDate],
values: ListBuffer[BigDecimal], validated: Boolean, overwrite: Boolean) {
val timeValues: BasicDBList = new BasicDBList
var i = 0
while ( i < dates.size ) {
val obj: BasicDBObject = new BasicDBObject("time", dates(i))
obj.put("value", values(i).toString())
timeValues.add(obj)
i += 1
}
if ( debug ) System.out.println("Storedata: " + timeValues.toString) <-- error here
Run Code Online (Sandbox Code Playgroud)
错误日志:
java.lang.RuntimeException: json can't serialize type : class java.time.LocalDate at com.mongodb.util.ClassMapBasedObjectSerializer.serialize(ClassMapBasedObjectSerializer.java:77) at com.mongodb.util.JSONSerializers$MapSerializer.serialize(JSONSerializers.java:317) at com.mongodb.util.ClassMapBasedObjectSerializer.serialize(ClassMapBasedObjectSerializer.java:79) at com.mongodb.util.JSONSerializers$IterableSerializer.serialize(JSONSerializers.java:290) …
我无法理解为什么这段代码错了,错误信息是:
error: '}' expected but '.' found.
Run Code Online (Sandbox Code Playgroud)
在线
this.tX = cX
Run Code Online (Sandbox Code Playgroud)
码:
class Quaternion {
private var tX: Float = 0
private var tY: Float = 0
private var tZ: Float = 0
private var tW: Float = 1
def this(cX: Float, cY: Float, cZ: Float, cW: Float) {
this.tX = cX
this.tY = cY
this.tZ = cZ
this.tW = cW
}
...
Run Code Online (Sandbox Code Playgroud)
请帮我解决我可能明显的错误.
def createFloatBuffer(data: Option[Quaternion]*): Option[FloatBuffer] = data match {
...
}
def createFloatBuffer(data: Option[Vector3f]*): Option[FloatBuffer] = data match {
...
}
Run Code Online (Sandbox Code Playgroud)
由于两种方法具有相同的方法签名,因此不会编译此代码.没有类型不知道调用哪种方法.
我可以重命名方法,但是我想在我的代码中重载样式.