标签: access-violation

我的代码中的随机访问冲突

我一直在修改,调试,修改,调试(你知道演练),我只是无法弄清楚导致这些访问冲突的原因!

最典型的一个是在Skype4COM.dll中使用" 读取地址80000000 ",但我不怀疑它是导致它的代码.

我的第一个怀疑是我向Skype API发送了太多命令(通过Skype4COM),但在添加一些暂停逻辑后,为了确保Skype和COM对象能够跟上,我意识到这不是它 - 它仍然是发生的历史!

我正在使用Threads来执行此操作,即使不使用Threads,它仍然会引发AV.(我一次只使用一个线程)

这是我的Thread Execute方法:

procedure TMyThread.Execute;
Var
  I             : Integer;
  User          : PUser;
  ReceiverName  : String;
  FullMessage   : String;
  PauseEvent    : TEvent;
  TimesToPause  : Integer;
  iPause        : Integer;
  J             : Integer;
  FExit         : Boolean;
begin
  inherited;
  if Terminated then
  Exit;

  FreeOnTerminate := True;

  CoInitialize(Nil);

  FExit         := True;
  UserList      := TList.Create;
  SkypeThr      := TSkype.Create(Nil);
  PauseEvent    := TEvent.Create(True);
  Try
  try
      SkypeThr.Attach(10,False);

      Synchronize(SyncBegin);

      iMax := UserList.Count;
      Synchronize(SyncSetMax);
      LogID := 'N/A';


      TimesToPause := Round(UserList.Count / 300);

      // …
Run Code Online (Sandbox Code Playgroud)

delphi multithreading skype access-violation

8
推荐指数
2
解决办法
4593
查看次数

WM_PAINT中的访问冲突未被捕获

为了测试这个问题,我编写了一个最小的Windows应用程序.如果我在WM_PAINT处理程序中强制执行访问冲突,则此异常永远不会到达调试器.如果在没有调试器的情况下启动,则访问冲突也不会显示.通常,您应该获得Windows错误报告对话框.

深入挖掘似乎user32.dll中的某些内容会捕获所有传入的异常.这是正常的行为吗?我可以以某种方式控制它吗?是不是将所有异常都列为安全风险?至少它很烦人.

这是在Vista 64上使用32位和64位应用程序.在XP上,异常似乎按预期处理.其他Windows消息也有同样的问题.也许他们都是?

WM_PAINT处理程序:

case WM_PAINT:
    hdc = BeginPaint(hWnd, &ps);
    *(int*)0 = 0;
    EndPaint(hWnd, &ps);
    break;
Run Code Online (Sandbox Code Playgroud)

c++ windows winapi exception access-violation

7
推荐指数
2
解决办法
968
查看次数

尝试读取或写入受保护的内存.这通常表明其他内存已损坏

我真的不明白这个错误是如何发生的.请自行检查代码

    void dispatcherTimer_Tick(object sender, EventArgs e)
{
    string srUrl = lstLocalIndex[irLocalIndex] + lstMainIndex[irMainIndex].Replace("0;","");

    Task.Factory.StartNew(() =>
    {
        startNewWindow(srUrl);
    });

}


    void startNewWindow(string srUrl)
{
    NewWindowThread<TitleWindow, string>(c => new TitleWindow(c), srUrl);
}
Run Code Online (Sandbox Code Playgroud)

现在这段代码就是发生错误的地方.我还会附上截图

        private void NewWindowThread<T, P>(Func<P, T> constructor, P param) where T : Window
    {
        Thread thread = new Thread(() =>
        {
            T w = constructor(param);
            w.Show();
            w.Closed += (sender, e) => w.Dispatcher.InvokeShutdown();
            try
            {
                System.Windows.Threading.Dispatcher.Run();
            }
            catch
            {

            }
        });
        thread.SetApartmentState(ApartmentState.STA);
        try
        {
            thread.Start();
        }
        catch
        {

        }
    }
Run Code Online (Sandbox Code Playgroud)

此错误导致整个软件抛出错误并停止工作,即使我在新线程中调用它们:( …

c# wpf unhandled-exception memory-corruption access-violation

7
推荐指数
1
解决办法
3万
查看次数

C++关于跟踪访问冲突的任何建议?

我一直在尝试在我的程序中追踪访问冲突时遇到问题.它是在第三次调用析构函数时发生的,恰好是析构函数完成时.

我花了好几个小时试图追踪这一点,所以我正在寻找有关我能做的事情的进一步建议.我正在用newdelete运算符创建类实例.Visual Studio输出窗口显示:

First-chance exception at 0x60e3ad84 (msvcp100d.dll) in WebCollationAgent.exe: 0xC0000005: Access violation writing location 0xabababab. Unhandled exception at 0x60e3ad84 (msvcp100d.dll) in WebCollationAgent.exe: 0xC0000005: Access violation writing location 0xabababab.

有什么我可以做的,试图找出那些记忆位置的内容吗?

调用堆栈窗口显示以下内容(与我按时间顺序粘贴它的顺序相反,最早到最新):

Program.exe!Network::`scalar deleting destructor'()  + 0x2b bytes   C++

Program.exe!std::basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >::~basic_string<wchar_t,std::char_traits<wchar_t>,std::allocator<wchar_t> >()  Line 754 + 0xf bytes    C++

Program.exe!std::_String_val<wchar_t,std::allocator<wchar_t> >::~_String_val<wchar_t,std::allocator<wchar_t> >()  Line 478 + 0xb bytes  C++
Run Code Online (Sandbox Code Playgroud)

msvcp100d.dll!std :: _ Container_base12 :: _ Orphan_all()第214行+ 0x5字节C++

我对这些信息的最佳猜测是,有某种字符串变量引起了这个问题?有没有人对解释这些信息有任何建议?

任何其他建议也会有用,提前谢谢.

我在Windows 7下编码并使用Visual Studio 2010 Professional.

c++ destructor class instance access-violation

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

Windows Common Item对话框:ctypes + COM访问冲突

我正在尝试使用该ctypes模块来调用Windows的Common Item Dialog API.下面显示的代码大致基于MSDN文档中列出的步骤.它唯一的依赖是comtypes.GUID模块.

import ctypes
from ctypes import byref, POINTER, c_int, c_long
from ctypes.wintypes import HWND, HRESULT
from comtypes import GUID

CLSID_FileOpenDialog = '{DC1C5A9C-E88A-4DDE-A5A1-60F82A20AEF7}'
IID_IFileDialog = '{42F85136-DB7E-439C-85F1-E4075D135FC8}'
#IID_IFileOpenDialog = '{D57C7288-D4AD-4768-BE02-9D969532D960}'
CLSCTX_SERVER = 5
COINIT_APARTMENTTHREADED = 2
FOS_PICKFOLDERS = 32
FOS_FORCEFILESYSTEM = 64

ole32 = ctypes.windll.ole32
CoCreateInstance = ole32.CoCreateInstance
CoInitializeEx = ole32.CoInitializeEx

CoInitializeEx(None, COINIT_APARTMENTTHREADED)

ptr = c_int()
error = CoCreateInstance(
    byref(GUID(CLSID_FileOpenDialog)), None, CLSCTX_SERVER,
    byref(GUID(IID_IFileDialog)), byref(ptr))
assert error == 0

ptr = ptr.value …
Run Code Online (Sandbox Code Playgroud)

python windows com ctypes access-violation

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

访问冲突写入位置0xCCCCCCCC

所以我有一个我生命中见过的最奇怪的虫子.我已经购买了一本DirectX 11书,附带了一些[示例代码]:http://www.d3dcoder.net/d3d11.htm 我很确定在某些时候我设法编译并运行每个示例应用程序,但现在,我在运行时出现"访问冲突写入位置0xCCCCCCCC"错误.

现在,这发生在以下一行:

ShadowsApp::ShadowsApp(HINSTANCE hInstance) : D3DApp(hInstance)
{
    mMainWndCaption = L"Shadows Demo"; <- Crashes here !!!  
    mLastMousePos.x = 0;
    mLastMousePos.y = 0;
    ...
}
Run Code Online (Sandbox Code Playgroud)

mMainWndCaption在.h中被声明为这样

std::wstring mMainWndCaption;
Run Code Online (Sandbox Code Playgroud)

并在ShadowsApp继承自的类的构造函数中使用默认值进行设置

D3DApp::D3DApp(HINSTANCE hInstance) : 
mhAppInst(hInstance),
mMainWndCaption(L"D3D11 Application"),...
Run Code Online (Sandbox Code Playgroud)

我想,这已经很奇怪了......现在最奇怪的部分是当我在d3dApp.h中声明任何类型的ANY变量时,我不再有"访问冲突写入位置0xCCCCCCCC"错误,所有内容都构建并运行完美.作为一名C#程序员,这对我来说绝对没有意义.如何在类中声明一个随机变量可以"修复"这样的事情?!

任何建议将不胜感激:-)

c++ directx access-violation

7
推荐指数
2
解决办法
4814
查看次数

在64位系统中分配超过4GB的内存

我正在运行此代码,在64位vc ++ 2005上编译,在Windows Server 2008 R2上使用32GB.for循环中存在访问冲突.

#include <iostream>
using namespace std;


int main(int argc, char* argv[])
{   
    double *x = new double[536870912];

    cout << "memory allocated" << endl;

    for(long int i = 0; i < 536870912; i++)
    {   
        cout << i << endl;
        x[i] = 0;
    }

    delete [] x;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

因此,如果新双[536870912]中没有异常,为什么在对特定阵列位置进行赋值时会出现访问冲突?

值得一提的另一点是,该程序在另一台计算机上成功测试.

c++ memory access-violation windows-server-2008-r2

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

C#中使用GLFW的AccessViolationException

我有一个glfwSetCharCallback函数的问题.每当我调用它时,glfwPollEvents都会抛出一个AccessViolationException:"试图读取或写入受保护的内存.这通常表明其他内存已损坏."

我创建了一个非常简单的包装器来演示问题:

using System;
using System.Runtime.InteropServices;
using System.Security;

namespace Test
{
    public delegate void GlfwCharCallback(GlfwWindow window, Char character);

    [StructLayout(LayoutKind.Explicit)]
    public struct GlfwMonitor
    {
        private GlfwMonitor(IntPtr ptr)
        {
            _nativePtr = ptr;
        }

        [FieldOffset(0)] private readonly IntPtr _nativePtr;

        public static readonly GlfwMonitor Null = new GlfwMonitor(IntPtr.Zero);
    }

    [StructLayout(LayoutKind.Explicit)]
    public struct GlfwWindow
    {
        private GlfwWindow(IntPtr ptr)
        {
            _nativePtr = ptr;
        }

        [FieldOffset(0)] private readonly IntPtr _nativePtr;

        public static GlfwWindow Null = new GlfwWindow(IntPtr.Zero);
    }

    public class Wrap
    {
        [DllImport("GLFW3", CallingConvention = CallingConvention.Cdecl), SuppressUnmanagedCodeSecurity] …
Run Code Online (Sandbox Code Playgroud)

.net c# dllimport access-violation glfw

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

F#与C#类互操作,它具有可选的可为空参数设置为null但是null导致NullReferenceException/AccessViolationException

我有以下C#类

public class BadClass
{
    public BadClass(int? bad = 1)
    {
    }
}

public class GoodClass
{
    public GoodClass(int? good = null)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它们都具有可选的可空参数作为其构造函数的一部分,唯一的区别是BadClass将参数default设置为null以外的其他值.

如果我尝试在F#中创建这些类的实例,这就是我得到的:

这很好用:

let g = GoodClass()
Run Code Online (Sandbox Code Playgroud)

这会抛出NullReferenceException:

let b = BadClass()
Run Code Online (Sandbox Code Playgroud)

这会引发AccessViolationException

let asyncB = async { return BadClass() } |> Async.RunSynchronously
Run Code Online (Sandbox Code Playgroud)

知道为什么会这样吗?

编辑

使用ILSpy对其进行反编译,这是F#的输出

C#类位于一个名为InteopTest的程序集中[原文如此]

ILSpy到C#

GoodClass g = new GoodClass(null);
    BadClass b = new BadClass(1);
    FSharpAsyncBuilder defaultAsyncBuilder = ExtraTopLevelOperators.DefaultAsyncBuilder;
    FSharpAsync<BadClass> fSharpAsync = defaultAsyncBuilder.Delay<BadClass>(new Program.asyncB@10(defaultAsyncBuilder));
    FSharpAsync<BadClass> computation = fSharpAsync;
    BadClass asyncB = FSharpAsync.RunSynchronously<BadClass>(computation, …
Run Code Online (Sandbox Code Playgroud)

c# f# interop access-violation nullreferenceexception

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

覆盖抽象方法的System.AccessViolationException

有点困惑,为什么我有一个问题.它花了我一段时间,但已经把问题解决了,这是最简单的情况我得到以下奇怪的(无论如何我的眼睛)行为.

我有一个基类:

public abstract class FailedSubmitterBase
{

    public FailedSubmitterBase(UserApplicationToken userApplicationToken)
    {
    }

    public abstract int ResubmitFailed(ProviderRequest request, Access.CentralServices.CSService.Itinerary csItinerary,
            ImpersonatedUserDetails impersonatedUser, BasketItem basketItem, CRMResponseDetails crmResponseDetails,
        string crmUsername, string crmSuperUsername);
}
Run Code Online (Sandbox Code Playgroud)

和一个子实例:

public class CoreFailedSubmitter : FailedSubmitterBase
{
    private string _emptyNarrativeString = "Failed to post to CS - Unspecified Error";

    protected UserApplicationToken _userApplicationToken;

    public CoreFailedSubmitter(UserApplicationToken userApplicationToken) : base(userApplicationToken)
    {
        _userApplicationToken = userApplicationToken;
    }
        /**/
    public override int ResubmitFailed(ProviderRequest request, Access.CentralServices.CSService.Itinerary csItinerary,
            ImpersonatedUserDetails impersonatedUser, BasketItem basketItem, CRMResponseDetails crmResponseDetails, string crmUsername, string crmSuperUsername) …
Run Code Online (Sandbox Code Playgroud)

c# abstract-class .net-4.0 access-violation visual-studio-2013

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