标签: access-violation

FMod记忆流问题

编辑:嗯......这很有趣.我将设置设置为指针并传递给它.工作得很漂亮.所以,这就解决了.对于那些对答案好奇的人,我会保持开放.

我在从内存流中在FMod中创建声音时遇到问题.我查看了FMod附带的loadfrommemory示例,然后进行了操作.首先,我正在使用的代码......

CSFX::CSFX(CFileData *fileData)
{
FMOD_RESULT result;
FMOD_CREATESOUNDEXINFO settings;
settings.cbsize = sizeof(FMOD_CREATESOUNDEXINFO);
settings.length = fileData->getSize();
_Sound = 0;
std::string temp = "";

for (int i = 0; i < fileData->getSize(); i++)
    temp += fileData->getData()[i];

result = tempSys->createSound(temp.c_str(), FMOD_SOFTWARE | FMOD_OPENMEMORY, &settings,        &_Sound);
}
Run Code Online (Sandbox Code Playgroud)

就像这样,我在tempSys-> createSound()上遇到访问冲突.我已经确认tempSys有效,因为它在从文件创建声音时起作用.我还通过将内容写入文件来确认我的数据的char*是有效的,然后我可以在Media Player中打开该文件.我觉得设置有问题.如果我将该参数更改为0,程序不会爆炸,我最终得到结果= FMOD_ERR_INVALID_HANDLE(考虑到第3个参数为0,这是有意义的).知道我做错了什么吗?

另外,请忽略std :: string的使用,我将其用于某些测试目的.

c++ access-violation fmod

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

CreateProcess的未处理错误

我正在阅读c ++中的CreateProcess函数,我想尝试一下.代码的基本思想是让我的主要执行另一个进程(记事本).真的,这只是基本代码.当我运行程序时,我得到:

createprocess.exe中0x752bb763处的第一次机会异常:0xC0000005:访问冲突写入位置0x00be57b8.
createprocess.exe中0x752bb763处的未处理异常:0xC0000005:访问冲突写入位置0x00be57b8.

当我为发生错误的位置设置一个断点时,我会被带到tidtable.c(我想这是用于访问线程).特别是在tidtable.c中 CRTIMP PFLS_GETVALUE_FUNCTION __cdecl __set_flsgetvalue() 我真的不知道是什么或如何避免这个问题.CreateProcess调用发生错误(即,它永远不会输出"out of create").

我的代码是:

#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <strsafe.h>
#include <direct.h>
#include <string.h>
#include <conio.h>

int main(VOID)
{
    STARTUPINFO si;
    PROCESS_INFORMATION pi;

        //allocate memory
    ZeroMemory(&si, sizeof(si));
si.cb = sizeof(si);
ZeroMemory(&pi, sizeof(pi));


fprintf(stderr, "This is just a test");

//create child process
if (!CreateProcess(NULL,
    L"C:\\Windows\\Notepad.exe",
    NULL,
    NULL,
    FALSE,
    0,
    NULL,
    NULL,
    &si,
    &pi))
{
        fprintf(stderr, "create process failed");

        return -1;
}
fprintf(stderr, "out of create");

    //parent waits for child to …
Run Code Online (Sandbox Code Playgroud)

c++ winapi createprocess unhandled-exception access-violation

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

Visual Studio 2012无法调试非x64 .net应用程序:访问冲突

我从Win7 + VS2012升级(干净安装)到Win8 + VS2012.

之后我遇到了一个问题:当我尝试使用处理器目标AnyCPUx86运行任何项目时,vshost.exe在使用访问冲突构建和启动项目后立即崩溃.更改项目类型(console,winforms,wpf)不会影响此行为.

当我将架构更改为x64时,调试工作正常.

如果我启动一个新创建的控制台应用程序,这是我在Debug输出窗口中得到的输出:

'ConsoleApplication2.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_32\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll', Symbols loaded.
'ConsoleApplication2.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities\11.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.dll', Symbols loaded.
'ConsoleApplication2.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll', Symbols loaded.
'ConsoleApplication2.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Drawing\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Drawing.dll', Symbols loaded.
'ConsoleApplication2.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System\v4.0_4.0.0.0__b77a5c561934e089\System.dll', Symbols loaded.
'ConsoleApplication2.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.HostingProcess.Utilities.Sync\11.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.HostingProcess.Utilities.Sync.dll', Symbols loaded.
'ConsoleApplication2.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.VisualStudio.Debugger.Runtime\11.0.0.0__b03f5f7f11d50a3a\Microsoft.VisualStudio.Debugger.Runtime.dll'
'ConsoleApplication2.vshost.exe' (Managed (v4.0.30319)): Loaded 'e:\Users\SeriTools\Documents\Visual Studio 2012\Projects\ConsoleApplication2\ConsoleApplication2\bin\Debug\ConsoleApplication2.vshost.exe', Symbols loaded.
'ConsoleApplication2.vshost.exe' (Managed (v4.0.30319)): Loaded 'C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Core\v4.0_4.0.0.0__b77a5c561934e089\System.Core.dll', Symbols loaded.
'ConsoleApplication2.vshost.exe' …
Run Code Online (Sandbox Code Playgroud)

debugging access-violation visual-studio-debugging visual-studio-2012

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

使用硬件加速的Android MediaCodec解码器在本机代码中访问冲突

我的目标是使用Android MediaCodec解码视频流,然后使用输出图像在本机代码中进行进一步的图像处理.

平台:华硕tf700t android 4.1.1.测试流:H.264全高清@ 24 frm/s

有了Tegra-3 SoC,我依靠硬件支持视频解码.在功能上,我的应用程序表现得如预期的那样:我确实可以访问解码器图像并正确处理它们.但是,我遇到了非常高的解码器CPU负载.

在以下实验中,过程/线程负载由adb shell中的"top -m 32 -t"测量.为了从"top"获得可靠的输出,所有4个cpu内核都通过运行一些永久循环以最低优先级循环的线程来强制激活.这通过重复执行"cat/sys/devices/system/cpu/cpu [0-3]/online"来确认.为了简单起见,只有视频解码,没有音频; 并且没有时序控制,因此解码器尽可能快地运行.

第一个实验:运行应用程序,调用JNI处理函数,但所有进一步的处理调用都被注释掉了.结果:

  • 吞吐量:25 frm/s
  • 1%加载应用程序的线程VideoDecoder
  • 24%负载的进程/系统/ bin/mediaserver的线程Binder_3

似乎解码速度受CPU限制(四核CPU的25%)......启用输出处理时,解码图像正确并且应用程序正常工作.唯一的问题:解码时cpu负载过高.

经过大量的实验,我考虑给MediaCodec一个表面来绘制它的结果.在所有其他方面,代码是相同的.结果:

  • 吞吐量55 frm/s(不错!!)
  • 2%加载应用程序的线程VideoDecoder
  • 1%加载进程/ system/bin/mediaserver的线程mediaserver

实际上,视频显示在提供的Surface上.由于几乎没有任何CPU负载,这必须是硬件加速......

如果提供Surface,de MediaCodec似乎只使用硬件加速?

到现在为止还挺好.我已经倾向于使用Surface作为解决方法(不是必需的,但在某些情况下甚至是一个很好的).但是,如果提供表面,我无法访问输出图像!结果是本机代码中的访问冲突.

这真让我困惑!我没有看到的访问限制任何想法,任何或文档中http://developer.android.com/reference/android/media/MediaCodec.html.此外,谷歌I/O演示文稿http://www.youtube.com/watch?v=RQws6vsoav8中也未提及此方向.

那么:如何使用硬件加速Android MediaCodec解码器并以原生代码访问图像?如何避免访问冲突?任何帮助都会被激活!也有任何解释或提示.

我敢肯定的MediaExtractor和MediaCodec正确使用,因为该应用程序是functionaly OK(只要我不提供表面).它仍然是非常实验性的,在todo列表上有一个很好的API设计;-)

请注意,两个实验之间的唯一区别是变量mSurface:null或"mDecoder.configure(mediaFormat,mSurface,null,0)中的实际Surface";

初始化代码:

mExtractor = new MediaExtractor();
mExtractor.setDataSource(mPath);

// Locate first video stream
for (int i = 0; i < mExtractor.getTrackCount(); i++) {
    mediaFormat = mExtractor.getTrackFormat(i);
    String mime = mediaFormat.getString(MediaFormat.KEY_MIME);
    Log.i(TAG, String.format("Stream %d/%d %s", i, mExtractor.getTrackCount(), mime));
    if (streamId …
Run Code Online (Sandbox Code Playgroud)

android access-violation native-code

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

访问冲突读取位置 - 非终止字符串(不可读的内存)

我正在使用log4cplus库,我无法登录工作.

我用这个代码:

PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log.properties"));
Logger g_logger = Logger::getInstance(LOG4CPLUS_TEXT("mylogger"));

LOG4CPLUS_WARN(g_logger, LOG4CPLUS_TEXT("test test test"));
Run Code Online (Sandbox Code Playgroud)

它打破LOG4CPLUS_WARN了错误: Access violation reading location

这是我的调用堆栈:

msvcp110d.dll!std::basic_streambuf<wchar_t,std::char_traits<wchar_t> >::egptr() Line 236    C++
ProjectClientd.exe!std::basic_stringbuf<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::str() Line 103 C++
ProjectClientd.exe!std::basic_ostringstream<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::str() Line 553 C++
>   ProjectClientd.exe!wWinMain(HINSTANCE__ * hInstance, HINSTANCE__ * hPrevInstance, wchar_t * lpCmdLine, int nCmdShow) Line 55    C++
ProjectClientd.exe!__tmainCRTStartup() Line 528 C
ProjectClientd.exe!wWinMainCRTStartup() Line 377    C
Run Code Online (Sandbox Code Playgroud)

wWinMain ... line 55哪里LOG4CPLUS_WARN是被叫的地方.

我已经检查了这个有什么问题,basic_ostringstream似乎有些东西搞乱了编码或其他东西: 在此输入图像描述

在我的字符串末尾没有终止字符串(不可读的内存)和一大堆奇怪的字母?可能导致什么呢?

c++ logging access-violation log4cplus visual-studio-2012

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

锁定weak_ptr时为什么会出现访问冲突?

我有一个std :: weak_ptr.在尝试使用底层对象之前,我将其锁定以获取shared_ptr:

auto foo_sharedptr = foo_weakptr.lock();
if (foo_sharedptr != nullptr)
{
    // do stuff with foo
}
Run Code Online (Sandbox Code Playgroud)

通常这很好.但是,有时我在锁定调用期间遇到访问冲突:

Unhandled exception at 0x00007FF91F411BC3 (My.dll) in My.exe:  
0xC0000005: Access violation reading location 0xFFFFFFFFFFFFFFFF.
Run Code Online (Sandbox Code Playgroud)

我的猜测是底层指针已被删除,但我对weak_ptr的理解是,在这种情况下,lock应该返回一个nullptr.我在滥用这种类型吗?如果没有,我应该如何调试呢?

c++ unhandled-exception weak-ptr access-violation c++11

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

为什么这个struct literal在VS2013中通过地址而不是gcc/clang传递时会被破坏?

我正在为我维护的库组装一个Visual Studio 2013解决方案.该库主要使用竞技场分配,因此我们有一个分配器接口:

allocator.h

#define HAMMER_ALLOCATOR__H__
#include <sys/types.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef struct HAllocator_ {
    void* (*alloc)(struct HAllocator_* allocator, size_t size);
    void* (*realloc)(struct HAllocator_* allocator, void* ptr, size_t size);
    void (*free)(struct HAllocator_* allocator, void* ptr);
} HAllocator;
[... API functions ... ]
#ifdef __cplusplus
}
#endif
#endif
Run Code Online (Sandbox Code Playgroud)

我们还实现了一个包装器malloc,realloc并且free:

system_allocator.c

#include <string.h>
#include <stdlib.h> 
#include "internal.h"

void* system_alloc(HAllocator *allocator, size_t size) { 
    void* ptr = malloc(size + sizeof(size_t));
    *(size_t*)ptr = …
Run Code Online (Sandbox Code Playgroud)

c struct access-violation visual-studio-2013

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

UWP 访问冲突异常

当我在绑定到 UWP 中的枢轴控件的 ObservableCollection 中将项目从一个选项卡移动到另一个选项卡时,出现以下异常。

在 IRIS.ZustellerApp.exe 中的 0x699C7165 (Windows.UI.Xaml.Phone.dll) 处抛出异常:0xC0000005:访问冲突读取位置 0x00000000。

我还设法挖掘了转储,似乎异常发生在 Windows_UI_Xaml_Phone!XamlControlsTestHookCreateLoopingSelector

有趣的是,这并不尊重每次重现的相同模式。我几乎尝试了一切来解决这个问题,但没有结果。提前致谢。

c# exception nullpointerexception access-violation uwp

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

有没有办法预测 `Marshal.GetExceptionForHR(code, pointers)` 会抛出 `AccessViolationException`

我有一系列相互关联的问题。我想独立地知道所有这些问题的答案,所以*是的*,其中一些似乎是 XY 问题;但我确实想知道他们的解决方案!请参阅问题结尾以获取此集中其他问题的列表。


我有一种情况,调用Marshal.GetExceptionForHR(code, pointers)会抛出一个AccessViolationException.

显然这是一个非常糟糕的事情。太糟糕了,try...catch只是对我耸了耸肩,然后四处游荡……我不知道这是一件事:(

假设一个前提是“.GetExceptionForHR()我想做的是打电话”(请参阅​​其他问题以讨论这是否是一个好主意!)。

进一步假设AccessViolation在某些情况下导致 的任何原因都是不可避免的。

鉴于这些前提,有没有办法提前预测调用它们的方法会爆炸?一些等价物TryGetExceptionForHR()将返回false而不是炸毁我的整个程序。


此问题集中的其他问题。

c# exception marshalling access-violation

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

使用 MinGW 编译的 Node js (node-api) 插件导致访问冲突

构建 node-api 链接的本机插件

经过3天的调查和研究,我对问题的原因已经一无所知。基本上我正在加载一个用 MinGW64 编译并链接到 C node-api 的 hello world Node JS 插件。

代码如下:

// hello.c

#include <node/node_api.h>

napi_value Method(napi_env env, napi_callback_info args)
{
    napi_value greeting;
    napi_status status = napi_create_string_utf8(env, "hello, asshole", NAPI_AUTO_LENGTH, &greeting);

    return status == napi_ok ? greeting : (napi_value)0;
}

napi_value init(napi_env env, napi_value exports)
{
    napi_value function;

    napi_status status = napi_create_function(env, 0, 0, &Method, 0, &function);
    if (status != napi_ok)
        return (napi_value)0;

    status = napi_set_named_property(env, exports, "hello", function);
    return status == napi_ok ? exports : …
Run Code Online (Sandbox Code Playgroud)

c++ dll access-violation node.js

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