begin process at 2012 02 11 14:00:08
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C#

 > 

Mono

 > 

Général

 > 

unsafe pointeurs et gestion des adresses


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

unsafe pointeurs et gestion des adresses

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ée 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...

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,718 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales