Problém s pointery c# – .NET – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s pointery c# – .NET – Fórum – Programujte.comProblém s pointery c# – .NET – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Kalgys0
Návštěvník
24. 10. 2013   #1
-
0
-

Zdravím,

potřeboval bych poradit ohledně pointerů v c#. Teď tady hodím jenom kód, ale hodil by se mi kontakt na někoho chytrého. Můj skype je kalgys1.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace LinkedList
{
    unsafe class Program
    {
        struct Nod
        {
            public int value;
            public Nod *dalsi;
            public Nod(int value, Nod *dalsi)
            {
                this.value = value;
                this.dalsi = dalsi;
            }
        }
        static Nod* Uzel(int value, Nod* dalsi)
        {
            Nod *a=null ;
            (*a).value = value;
            (*a).dalsi = dalsi;
            return a;
        }
        static void AddNext(Nod* prvni, Nod* druhy)
        {
            druhy->dalsi = prvni->dalsi;
            prvni->dalsi = druhy;
        }
        static void Main(string[] args)
        {
            StreamReader sr = new StreamReader("hodnoty.txt");
            Nod* hlava = null;
            Nod* posledni = Uzel(int.Parse(sr.ReadLine()), null);
            AddNext(hlava,posledni);            
            while (!sr.EndOfStream)
            {
                Nod* Prvek = Uzel(int.Parse(sr.ReadLine()), null);
                AddNext(posledni, Prvek);
                posledni = Prvek;
            }
            
        }
    }
}

Úkolem je načítat čísla z texťáku do jednosměrného spojitého seznamu se zarážkami. Chybu mi to vyhazuje, když se přiřadí hodnota "value" k Nod* posledni = Uzel(int.Parse(sr.ReadLine()), null), skáče chyba, že odkaz objektu není nastaven na instanci. Může mi někdo ukázat, jak to přepsat?

Nahlásit jako SPAM
IP: 2a00:1028:8384:a526:4962:...–
ingiraxo+15
Grafoman
24. 10. 2013   #2
-
0
-

#1 Kalgys
a co použít LinkedList ? Pochybuju, že máte používat pointery

Nahlásit jako SPAM
IP: 93.90.162.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
ingiraxo+15
Grafoman
24. 10. 2013   #3
-
0
-

Jinak tu chybu ti to hází proto, že nealokuješ Nod. Nemůžeš do null nastavovat hodnoty.. správně by to mělo být takto, ale fakt to nedoporučuju v C# 

    unsafe struct Node
    {
        public int value;
        public Node* next;
    }

    unsafe class Program
    {
        private static Node* first = null;
        private static Node* act = null;

        static void addNode(int value)
        {
            Node* node = stackalloc Node[sizeof(Node)];
            node->value = value;
            node->next = null;

            if (first == null)
            {
                first = node;
            }
            else
            {
                act->next = act;
            }
            act = node;
        }

        static void Main(string[] args)
        {
            addNode(10);
            addNode(20);

            Console.ReadKey();
        }
Nahlásit jako SPAM
IP: 93.90.162.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Kalgys0
Návštěvník
24. 10. 2013   #4
-
0
-

#3 ingiraxo
Problém je, že po nás chtějí celou tu strukturu a je jim jedno v jakém jazyce, já ale dělám v c# takže ...

Nahlásit jako SPAM
IP: 2a00:1028:8384:a526:3161:...–
Řešení
ingiraxo+15
Grafoman
24. 10. 2013   #5
-
0
-
Vyřešeno Nejlepší odpověď

#4 Kalgys
No tak vyhoď pointery a udělej to normálně, fakt nevim, proč cpeš c++ do C# 

    class Node
    {
        public int value;
        public Node next;
    }

    class Program
    {
        private static Node first = null;
        private static Node act = null;

        static void addNode(int value)
        {
            Node node = new Node();
            node.value = value;
            node.next = null;

            if (first == null)
            {
                first = node;
            }
            else
            {
                act.next = node;
            }
            act = node;
        }
    }
Nahlásit jako SPAM
IP: 93.90.162.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Kalgys0
Návštěvník
24. 10. 2013   #6
-
0
-

#5 ingiraxo
mě to tak napadlo ale cvičící říkala "s ukazateli" 

Nahlásit jako SPAM
IP: 2a00:1028:8384:a526:3161:...–
Kalgys0
Návštěvník
24. 10. 2013   #7
-
0
-

#5 ingiraxo
jinak tvůj příklad by byl super až na, 

Error    1    Struct member 'LinkedList.Program.Nod.dalsi' of type 'LinkedList.Program.Nod' causes a cycle in the struct layout    C:\Users\marcel\Documents\Visual Studio 2012\Projects\LinkedList\LinkedList\Program.cs

vadí tomu definice pomocí sama sebe

když to hodím jako classu tak je to ok

Nahlásit jako SPAM
IP: 2a00:1028:8384:a526:3161:...–
ingiraxo+15
Grafoman
24. 10. 2013   #8
-
0
-

#7 Kalgys
však tam se taky třída používá, sice to můžeš dát jako struct, ale přijde mi to zbytečně komplikovaný... musel by si vytvořit nullable struktůru

a pokud říkal s ukazateli, tak po vás chce C/C++ nikoliv C# nebo Javu.. osobně si myslim, že tohle se nejlíp dělá právě v těchto jazykách

Nahlásit jako SPAM
IP: 93.90.162.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
Kalgys0
Návštěvník
24. 10. 2013   #9
-
0
-

#8 ingiraxo
ještě, můžeš mi něco říct o zarážkách?

Nahlásit jako SPAM
IP: 2a00:1028:8384:a526:3161:...–
ingiraxo+15
Grafoman
24. 10. 2013   #10
-
0
-

#9 Kalgys
nevím co myslí tím "zarážka".. zeptej se jí na to

Nahlásit jako SPAM
IP: 93.90.162.–
Moje aplikace: http://ophite.cz
Tutoriály na: C#
KIIV
~ Moderátor
+43
God of flame
24. 10. 2013   #11
-
0
-

#9 Kalgys
pravdepodobne se tim mysli NULL pointer.. jako ze posledni prvek bude mit v ukazateli na dalsi NULL a to se bere jako konec (cili zarazka), nicmene je to pomerne nezvykly pojem (setkal sem se s tim mozna u bubble sort - kde to pro zmenu bylo: "nic se neprohodilo - pole je serazene - muze se koncit")

Nahlásit jako SPAM
IP: 62.168.56.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 45 hostů

Podobná vlákna

Problém s pointery — založil oxidián

Problém s pointery. — založil Sám_už_nevím

C++ pointery — založil jane32

Pointery — založil inferno-girl

Pointery v C — založil chef06

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý