logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[C] Wskaźnik do wskaźnika

rpal 28 Wrz 2010 00:22 3258 4
REKLAMA
  • #1 8558692
    rpal
    Poziom 27  
    Piszę to poniewa pora późna a sam się zamotałem może ktoś mnie naprowadzi na właściwy tor :)
    Mam zadeklarowany wskaźnik
    Temu wskaźnikowi przypisany adres w SRAM wraz z zarezerwowanym rozmiarem pamięci za pomocą malloc, konkretnie 10 bajtów.
    W zarezerwowanym obszarze z kolei są adresy na inny obszar pamięci (też zarezerowany malloc) i umieszone dane. Na etapie inicjowania tych wskazników oraz zapisywania danymi wszystko jest OK. Można powiedzieć że w tej tablicy ptr są przechowywane adresy na kolejne miejsca pamięci które zawierają dane pewnej struktury.
    Kłopot jest nie w zapisie danych w pamięci bo to przebiega poprawnie tylko w jej odczytaniu. Założenie jest takie że pewna część programu manipuluje aresem tymczasowej struktury w taki sposób aby czytać dane z kolejnych adresów wskazywanych przez ptr, przypisać ten adres tymczasowej strukturze i dalej coś tam sobie robić. AVRstrudio za moją sprawą :) z uporem maniaka tej strukturze przypisuje adres zmiennej ptr a nie kolejno zapisane dane na ktore ona wskazuje, np w ten sposób
    tmp_struct=(struct prompt *)((void *)(ptr+i))

    Gdzie zatem leży pies pogrzebany?
  • REKLAMA
  • #2 8558722
    michalko12
    Specjalista - Mikrokontrolery
    A co mówi arytmetyka wskaźników odnośnie wskaźników na typ void?
  • REKLAMA
  • #3 8558785
    rpal
    Poziom 27  
    Kolego za późno na powtórkę z wiedzy zaplatałem się:)
  • REKLAMA
  • #4 8558806
    sedr
    Poziom 17  
    rpal napisał:
    tmp_struct=(struct prompt *)((void *)(ptr+i))

    Gdzie zatem leży pies pogrzebany?


    Dodawanie liczby całkowitej do wskaźnika przesuwa adres o i*sizeof(typWskaźnika).
  • #5 8559048
    Freddie Chopin
    Specjalista - Mikrokontrolery
    Problem polega na zupełnie głupio napisanym programie. Skoro ptr to tablica wskaźników na struktury (czy tam wskaźnik na wskaźnik na strukturę), to tak właśnie powinien być zadeklarowany, a nie void*....

    struct xyz;

    struct xyz *ptr[10];

    lub

    struct xyz **ptr;

    4\/3!!
REKLAMA