小编seb*_*ebf的帖子

Access Violation'0xc0000005'的范围究竟是什么?

我想知道异常0xc0000005以及它实际包含的内容.

即如果应用程序试图访问属于另一个进程的释放内存/内存,则会发生这种情况.
但是,例如,为硬件映射的地址呢?或者有效范围之外的地址?是否尝试使用相同的代码访问这些错误,或者他们是否拥有自己的错误?这是否包括对进程拥有的有效地址的读取失败?

基本上我想知道什么时候应用程序失败了这个例外,可能出了什么问题; 这是一个狭隘的错误,只能来自应用程序.代码还是我在看任何东西,包括硬件问题?

(我知道必须有一个MSDN页面,但搜索谷歌或MSDN会带来预期的100页故障排除随机应用程序;))

谢谢!

windows winapi exception

34
推荐指数
2
解决办法
4万
查看次数

在Visual Studio 2010中更改文本光标/插入符号

我不小心将Visual Studio 2010中的文本光标/插入符号从行更改为带有突出显示整个字符的框的文本光标/插入符号,但无法找到如何将其更改回来.谁能告诉我怎么样?谢谢!

visual-studio-2010 visual-studio

21
推荐指数
3
解决办法
5万
查看次数

检查类型是否为blittable的最快方法?

在我的serialiser/deserialiser中,我有以下代码段:

    if (element_type.IsValueType && collection_type.IsArray)
    {
        try
        {
            GCHandle h = GCHandle.Alloc(array_object, GCHandleType.Pinned);
            int arrayDataSize = Marshal.SizeOf(element_type) * c.Count;
            var array_data = new byte[arrayDataSize];
            Marshal.Copy(h.AddrOfPinnedObject(), array_data, 0, arrayDataSize);
            h.Free();
            WriteByteArray(array_data);

            return;
        }
        catch (ArgumentException)
        {
            //if the value type is not blittable, then we need to serialise each array item one at a time
        }
    }
Run Code Online (Sandbox Code Playgroud)

其目的是尝试以尽可能最有效的方式(即,仅将内容作为一堆字节)写入流中的值类型数组.

当类型是值类型但不是blittable时,问题就出现了,Alloc()失败了.此时捕获异常并将控制权传递给处理数组的代码,就好像它由引用类型组成一样.

然而,由于我的应用程序中遇到的值类型的数量,此检查(由于抛出并捕获我理解的异常非常慢)被证明是严重的瓶颈.所以我想知道,检查类型是否是blittable的最快方法是什么?

c# serialization marshalling value-type blit

16
推荐指数
2
解决办法
2529
查看次数

为什么非托管结构不能成为托管类的成员?

我知道在C++/CLI中,在定义托管类时不能使用非托管类型:

public struct Unmanaged
{
    int x;
    int y;
};

public ref class Managed
{
    int one;
    Unmanaged two;  //error C4368
};
Run Code Online (Sandbox Code Playgroud)

我不明白为什么.Unmanaged它只是一个本机类型的集合 - 它的大小是已知的,当然它(我的意思是定义它的内存块)将被Managed"托管堆"内部的" 内存块"移动,并且元数据中存储的任何偏移都将保持有效,不是吗?就像声明了整数或浮点数一样?

为什么我们不能混合类型?

interop unmanaged c++-cli

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

VS2010:如何在Post-Build中使用环境变量

在我的PC上,我创建了一个名为的系统环境变量 3DSMaxInstallDirectory

在命令行,如果我给

echo %3DSMaxInstallDirectory%Plugins\
Run Code Online (Sandbox Code Playgroud)

我明白了

D:\Program Files\Autodesk\3ds Max 2011\Plugins\
Run Code Online (Sandbox Code Playgroud)

在Visual Studio中,我进入Post-Build部分

copy "$(TargetDir)$(TargetName).*" "$(3DSMaxInstallDirectory)Plugins\"
Run Code Online (Sandbox Code Playgroud)

然而,在构建我得到

Error   4   The command "copy "C:\Users\Sebastian\Documents\Visual Studio 2010\Projects\MaxBridge\MaxBridgeImporterPlugin\bin\Debug\MaxBridgePlugin.*" "Plugins\"
" exited with code 1.   MaxBridgeImporterPlugin
Run Code Online (Sandbox Code Playgroud)

谷歌的结果是令人困惑的混合建议,Visual Studio不支持EV,Visual Studio支持EV,Visual Studio需要%..%和Visual Studio需要$(..) - 而且似乎都没有我的电脑.

在Visual Studio中使用环境变量的正确方法是什么?

(是的,目录存在,我不想明确设置路径的原因是我准备分享这个项目,下载后和建立之前别人必须采取的每一步都是另一个障碍.)

environment-variables visual-studio-2010

9
推荐指数
2
解决办法
1万
查看次数

将double转换为uint8时,让Matlab发出警告,反之亦然?

通常在Matlab中,颜色由RGB强度值的三个元素向量表示,精度为uint8(范围0-255)或双精度(范围0-1).Matlabs的功能,例如imshow使用任何一种表示,使得它们都易于在程序中使用.

然而,在将颜色值从一种类型的矩阵分配给另一种类型的矩阵时,同样容易引入错误(因为该值是静默转换的,但不会重新缩放到新范围).刚刚花了几个小时发现这样的错误,我想确保它再也不会被引入.

在进行类型转换时,如何让Matlab显示警告?

理想情况下,只有当转换介于double和之间时才会出现uint8.它也应该很难停用(即加载工作区时,或者当matlab崩溃时,不重置选项).

matlab casting

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

是否存在不使用连续内存的开源MemoryStream实现?

像GuyFawkes一样,我想使用MemoryStream存储大量数据,但仍然遇到"内存不足"异常.
TomTom的答案是我想要做的 - 使用一个不需要连续块的实现 - 但我想知道是否已经有一个免费的实现可用,以免我自己写一个?

有没有人知道可以使用大流的MemoryStream的一个好的,免费的重新实现?

编辑:

MemoryMappedFile解决方案非常有趣,我会记住它用于其他项目,但正如Henk所说,它偏离了MemoryStream所针对的抽象.具体而言,要求已知容量.
替换者应处理的数据在某些情况下会非常大,但在其他情况下相对较小(并且我们不知道它将会是什么,直到为时已晚;)); 此外,该课程的许多实例将同时存在.最终,使用MemoryMappedFiles(确定每个文件的适当大小)所需的工作将等同于实现TomTom解决方案的工作.

.net c# memorystream

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

如何在C++/CLI中的引用类中使用"本机"指针?

我正在尝试编写一个将使用DirectShow的小型库.这个库将由.NET应用程序使用,所以我认为最好用C++/CLI编写它.

我遇到这条线有问题但是:

    HRESULT hr = CoCreateInstance(  CLSID_FilterGraph,
                                    NULL,
                                    CLSCTX_INPROC_SERVER,
                                    IID_IGraphBuilder,
                                    (void**)(&graphBuilder) );  //error C2440:
Run Code Online (Sandbox Code Playgroud)

在哪里graphBuilder声明:

public ref class VideoPlayer
{
public:
    VideoPlayer();
    void Load(String^ filename);

    IGraphBuilder*  graphBuilder;

};
Run Code Online (Sandbox Code Playgroud)

如果我正确理解了这个页面,我可以*/&像往常一样用C++/CLI库中的非托管内存表示"本机"指针; ^用于表示指向托管对象的指针.但是,此代码生成:

错误C2440:'type cast':无法从'cli :: interior_ptr'转换为'void**'

该错误表明该graphBuilder被认为是一个'cli::interior_ptr<Type>'.那是托管内存的指针/句柄,不是吗?但它是纯粹的原生指针.我不是试图将指针传递给期望句柄的方法,反之亦然 - 我只是想将它存储在我的托管类中)如果是这样,我怎么说graphBuilder是一个"传统"指针?

(这个问题类似,但答案是,使用pin_ptr,我看不到帮助我,因为它不能成为我班级的成员)

clr c++-cli

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

我可以在 Visual Studio 2017 调试器中查看未处理的异常吗?

我正在使用的库(zmq)抛出异常。调试器中断并通知我。

如果可能的话,我怎样才能看到这个异常。具体来说是什么()消息?无需在其周围放置 try/catch 并打印到输出流。

  • 它不会出现在汽车或本地监视列表中。我已经搜索了它发生点周围的堆栈帧。
  • 将 $exception 添加到手动监视列表只会返回“标识符 $exception 未定义”值
  • 使用内存资源管理器询问异常的位置不会显示任何有用的信息。

我读过这可以在使用 CLR 时完成 - 我可以在常规 C++ 中完成吗?

c++ debugging visual-studio

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

使Visual Studio在用户(std :: exception)例外中断吗?

我的代码抛出未处理的异常,但Visual Studio中的调试器只会破坏系统抛出的异常.

例如,下面的返回值getaddrinfo不为零,我的异常应该首先抛出 - 实际上,如果我在第171行放置一个断点,它就会被命中 - 但是调试器只会在调用时中断socket.

我知道我必须明确地添加自己的类型,否则检查All C++ Exceptions not in this list,在Exception Settings,但是这是一个std::exception我抛出,并且std::exception 选中.

如何在我的例外情况下自动使Visual Studio调试器中断?

在此输入图像描述

c++ exception-handling visual-studio-debugging visual-studio-2017

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