Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : unsafe pointeurs et gestion des adresses [ Mono / Général ] (Halicorne)

vendredi 23 mai 2008 à 23:41:08 | unsafe pointeurs et gestion des adresses

Halicorne

Salut à tous,

J'ai quelques soucis avec la gestion des pointeurs en C# :
voici le code que je désire gérer :

using System;

namespace ltest
{
    public class test
    {
        static unsafe ltest.test* root;       // racine
        string str;                          // string
        unsafe ltest.test* right;             // pointeur de droite
        unsafe ltest.test* left;              // pointeur de gauche
 
        public test(string p_str)
        {
          str=p_str;
        }

        public static unsafe bool find(string p_srch){
            ltest.test* l_ptr=root;
            while(l_ptr!=null){
                if(l_ptr.str.CompareTo(p_srch)==0) return true;
                else {
                    if(l_ptr.mot.CompareTo(p_srch)>0) l_ptr=&l_ptr.right;
                    else l_ptr=&l_ptr.left;
                }
            }
            return false;
        }
    }
}

Le code ne compile pas : [Task:File=/ltest/ltest/Main.cs, Line=10, Column=33, Type=Error, Priority=Normal, Description=Cannot take the address of, get the size of, or declare a pointer to a managed type `ltest.test'(CS0208)]

Malgré tous mes efforts, j'ai du mal à comprendre pourquoi (l'option autoriser le code non sur est activée).

Merci de votre aide.
Halicorne.
    Pas de projection, c'est ici et maintenant que se font les choses !!!

samedi 24 mai 2008 à 00:02:05 | Re : unsafe pointeurs et gestion des adresses

coq

Administrateur CodeS-SourceS
Salut,

As tu regarder ceci ? : [ Lien ]



/*
coq
MVP Visual C#
CoqBlog
*/

samedi 24 mai 2008 à 09:01:20 | Re : unsafe pointeurs et gestion des adresses

Julien237

Salut,

Comme le dit le lien de coq, l'arithmétique des pointeurs n'est pas permises avec les types managés. Pour ma part, je pense que l'unsafe a été conservé en C# pour tout ce qui est accès en mémoire de type "données", pour les streams, les buffers, etc...
Mais que, comme le traduit ton erreur, on ne devrait pas utiliser ces pointeurs pour manipuler des objets.

Mon avis est qu'il est possible de (à peu près allez...) tout faire (des choses conventionnelles disons...) avec ce que nous propose C# sans l'arithmétique de pointeurs, et que tu devrais repenser ton code, mais je peux me tromper...

J'ai l'impression en regardant ton code, que tu as déclaré tous tes objets membres de type "test" en tant que pointeur comme on l'aurait fait en C++. Sais-tu qu'en C#, toute déclaration d'objet est faite nativement par référence ?

Donc déclarer
Object* myObject;       //En C++
Revient à déclarer
Object myObject;         //En C#

Pardonne moi de paraitre "trop didactique" si tu es déjà au courant de toutes ces choses, on ne sait jamais sur qui on tombe, avec quelle expérience, sur le forum après un message


Julien.

samedi 24 mai 2008 à 10:19:37 | Re : unsafe pointeurs et gestion des adresses

Halicorne

Merci beaucoup pour vos conseils avisés.

En fait, je cherchais à pouvoir (comme en C ou C++) affecter les attributs left ou right (pointeurs d'instances) d'une structure/classe locale à une fonction, qui pointerait sur une variable existant ailleurs que dans le bloc.

J'ai trouvé la solution sans utilisation de l'option unsafe :

public static void add(string p_str,ref ltest p_mot){
    if(p_mot==null) {
        p_mot=new Mot(p_str);
    } else {
        if(p_mot.mot.CompareTo(p_str)>0) add(p_str,ref p_mot.right);
        else add(p_str,ref p_mot.left);
    }
}

Problème réglé !!!!
Merci encore.
Halicorne

    Pas de projection, c'est ici et maintenant que se font les choses !!!



Cette discussion est classé dans : test, str, ptr, unsafe, ltest


Répondre à ce message

Sujets en rapport avec ce message

Exécution d'une transaction. A bout de nerf ! [ par Godzidane ] Salut à tous.Il s'agit d'une série de requêtes que j'exécutes dans le cadre d'une transaction. Ce n'est pas la 1ère fois que je m'y prend de la sorte création d'un test psychologique ? [ par arwiin ] Bonjour a tous, je suis actuellemnt d'apprendre le langage Csharp dans le but de créer une version informatisé du "test de barrage" afin d'évaluer l'a recuperation de donnée [ par Online ] Bonjour, voila, j'ai réalisé un prog qui se connecte à un FTP via des commandes DOS, mais j'aimerais bien récupérer ls informations renvoyées par le s Petit problème upload [ par maevacmoi ] Hello !J'ai un fichier (exe) sauvegardé sur un serveur, et voudrai l'enregistrer en local, à l'aide d'une fonction recevant en paramètre string source pb d impression [ par shinevilkyo ] lu,j ai un p lorsque je veux imprimer un element de ma listview j ai le droit a une exception pourkoi je ne sasi vraiment po pourier vous m aider:vo Numero Random 16 chiffres [ par metasys ] Bonjour tlm,Je rechercher une methode pour generer des nombres de 16 chiffres aleatoirement. Je connais Random test = new Random(); test.Next(); et te test si une variable est numérique [ par oboudou ] En VB6 je pouvais avec IsNumeric() tester une variable et savoir si elle est numérique. Je cherche l'équivalent en C# Dot.NetOlivier Boudou Pb de connexion [ par EksTaZia ] jai une fonction:private void Envoi(NetworkStream str, string message) { try { if(str != null) { byte[] buffer = System.Text.Encoding.ASCII.GetBy Trouver un élément dans une énumération [ par oberown ] Bon je suis en pleins les énumérations, au cas où si ca se voyait pas ;-)Donc j'ai une string elt, et une enum test;Comment faire pour savoir si mon e Connect a SQL Server [ par fdouieb ] Bonjour,J'utilise C# depuis quelques mois. Cependant c'est uniquement la partie Windows Form que avait attiré mon attention dans un premier temps. Mai


Nos sponsors

Sondage...

CalendriCode

Septembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
2930     

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,16 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.