Struct Initialisation Pointeur en C#
unsafe public class Temp
{
public struct Node
{
Node *left;
Node *right;
int value;
}
public Temp()
{
Node* T=new Node();
T->left=null;
T->right=null;
T->value=10;
}
}
main()
{
Temp temp=new Temp();
}
Il donne une erreur que de l'Objet de référence non définie à l'instance d'un objet. Comment puis-je le faire quand je veux faire AVL Programme d'Arbre(que j'ai créé et testé en C++, mais la copie en C# donne erreur)
- Ce qui donne l'erreur? Je ne vois pas de code d'erreur.
- Pourquoi êtes-vous à l'aide de
unsafe
? La copie de code C++ ne va pas vous obtenir de très loin. Êtes-vous sûr que vous ne voulez pas unclass
(en C#, cela signifie que le type de référence, ce qui permetnull
valeurs) au lieu d'unstruct
(en C#, cela signifie que le type de valeur, qui est toujours copié par valeur et n'a pas de notion denull
)?
Vous devez vous connecter pour publier un commentaire.
N'essayez pas d'utiliser des pointeurs en C# comme ça. Si vous êtes le portage de code C++ qui utilise des pointeurs comme des références, au lieu d'utiliser les types de référence. Votre code ne fonctionne pas à tous; "" ne pas allouer des structures hors du tas, pour une chose, et même si elle n'a pointeurs doivent être épinglé en place en C#, le C# est un garbage collector de la langue.
En bref ne jamais utiliser
unsafe
à moins que vous de bien comprendre tout ce qu'il ya à savoir sur la gestion de la mémoire en C#. Vous êtes de désactiver le système de sécurité qui est là pour vous protéger, et vous devez savoir ce que le système de sécurité ne.Le code devrait être:
Le problème est à la ligne:
En C#,
new Node()
retourneNode
(qui est la référence), pasNode*
(qui est le pointeur).Vous devez utiliser stackalloc, à la place.
De toute façon, s'il vous plaît ne pas copier C++ et de le faire en C# chemin!
Vous ne pouvez pas affecter un .NET variable à un pointeur, vous ne pouvez prendre d'adresse. Si vous ne faites pas référence à un
new
edNode
il obtient déchets ramassés immédiatement, donc vous avez probablement couru dans "la référence d'objet non définie". Expression commeNode* T = new Node()
ne devrait pas compiler toutefois, puisqu'il est effectivement essaie de faire une défaillance de conversion de type.Ce que vous essayez de faire est mal: ne pas copier et de coller le code C++ C#, c'est absurde. Si vous avez déjà testé C++ composants .NET/non géré interop pour le maréchal de données entre les deux mondes, bien que je recommande de ne pas le faire à ce niveau d'abstraction. Si vous êtes en train de faire un exercice, de mettre en œuvre un arbre AVL .Monde NET uniquement, sinon utilisez l'un des cadre des collections avec des fonctionnalités équivalentes par exemple
SortedSet
ouSortedDictionary
...