小编Vla*_*ovs的帖子

在发布模式下在.NET中进行调试

前段时间我读过一篇关于CLR的文章,其中作者表明,如果一个项目是在DEBUG模式下编译的,那么在每个操作符出现一个NOP命令之前,就可以调试一个代码.不过,今天我发现我们也可以在发布模式下调试......请帮助理解差异.

.net debugging clr cil

6
推荐指数
2
解决办法
2964
查看次数

这种非类型模板参数扩展如何工作?+ gcc中可能存在的错误?

template <typename T, typename T::tag...>
void f() {}

struct Tagged { using tag = struct{}; };
struct Untagged {};

void test() {
    f<Tagged>();
    f<Untagged>(); // fails
}
Run Code Online (Sandbox Code Playgroud)

此代码编译在gcc 8.1上,而clang 6.0和MSVC 19失败.请注意,--std=c++14它传递给所有三个.

Clang的错误:

:9:5:错误:调用'f'没有匹配函数

f<Untagged>();

^~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

:2:6:注意:候选模板被忽略:替换失败[T = Untagged]:'Untagged'中没有名为'tag'的类型

void f(){}

 ^
Run Code Online (Sandbox Code Playgroud)

MSVC的错误:

(9):错误C2672:'f':找不到匹配的重载函数

(9):错误C2893:无法专门化函数模板'void f(void)'

(9):注意:使用以下模板参数:

(9):注意:'T =未标记'

(9):注意:'__ formal = {default_valueAttribute}'

但是,如果我们评论有问题的部分:

template <typename T, typename T::tag...>
void f() {}

struct Tagged { using tag = struct{}; };
struct Untagged {};

void test() {
    f<Tagged>();
    //f<Untagged>();
} …
Run Code Online (Sandbox Code Playgroud)

c++ templates c++11 c++14

5
推荐指数
0
解决办法
217
查看次数

返回JNI从本机方法创建的本地引用

JNI参考说明了这一点

"本地引用在本机方法调用的持续时间内有效.它们在本机方法返回后自动释放.

资料来源:http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html#global_local

我有点迷失在这里.根据上面,我必须显式调用NewGlobalRef并传递从调用NewObject的对象返回的对象.我尝试了这个,似乎当GC启动时,它不会收集我的引用(就像仍然保留它们的东西).考虑以下项目: Main.java:

package lv.example;

import java.io.IOException;
import java.util.ArrayList;

class Main {

    public static void main(String[] args) {
        ArrayList<Object> store = new ArrayList<Object>();
            while(true) {
                Object d = null;
                try {
                    int c = System.in.read();
                    d = Dummy.getWeakGlobalRef();
                    if(c == 'c')
                        store.clear();
                    store.add(d);
                    System.out.println(d);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

    }

}
Run Code Online (Sandbox Code Playgroud)

Dummy.java:

package lv.example;

class Dummy {

    static {

        System.loadLibrary("dummy");
    }
       native static Dummy getLocalRef();
       native …
Run Code Online (Sandbox Code Playgroud)

java java-native-interface garbage-collection jnienv

1
推荐指数
1
解决办法
2901
查看次数

访问无效指针并获取其地址

考虑这样的代码:

std::vector<int> vec { 1, 2, 3 };
auto addr = &*vec.end();
Run Code Online (Sandbox Code Playgroud)

或简化:

int* ptr = 0;
auto addr = &*ptr;
Run Code Online (Sandbox Code Playgroud)

显然auto val = *ptr;会出现段错误.因此&*ptr,不会以相同的方式访问内存.为什么会这样?标准中是否有特定条目?

c++ memory stl

1
推荐指数
1
解决办法
118
查看次数