Указатель рассматривается Visual Studio как пустота ** - PullRequest
1 голос
/ 14 июля 2010

что-то странное происходит с моим кодом. Я использую библиотеку, которая должна работать идеально (nglib из открытого Netgen Mesher). Я могу связать и включить все, но я не могу использовать эту библиотеку:

Объект, который я хочу использовать: Ng_Mesh* mesh = Ng_NewMesh ();

Метод Ng_NewMesh ():

   DLL_HEADER Ng_Mesh * Ng_NewMesh ()
   {
      Mesh * mesh = new Mesh;  
      mesh->AddFaceDescriptor (FaceDescriptor (1, 1, 0, 1));
      return (Ng_Mesh*) (void*) mesh;
   }

Когда я приезжаю к местным жителям, это выглядит как void**, обозначающее *mesh, что является void*. Это не NULL, потому что я могу добавлять точки и другие вещи к этому объекту, но с некоторыми функциями я получаю исключение:

System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто указывает на то, что другая память повреждена.

в nglib.Ng_GetPoint(Void** , Int32 , Double* )
в ForwardModelingPlugin.CustomMeshVol3D.tesselate(CustomMeshVol3D* )

nglib.Ng_GetPoint должен иметь в качестве аргументов (Ng_Mesh*, Int32, Double*), который объясняет это исключение.

Я не знаю, почему происходит этот кастинг.

1 Ответ

5 голосов
/ 14 июля 2010

Здесь написано:

/// Data type for NETGEN mesh
typedef void * Ng_Mesh;

поэтому Ng_Mesh* mesh; совпадает с void** mesh;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...