[elektro] C -- illegal pointer hiba

elight at gmail.hu elight at gmail.hu
Wed Sep 25 19:26:43 CEST 2013


Gyári kódos mikroC-t használok régóta..
elég nagy gyakorlattal,
ebben  nagyonnagy részben meg is bízok.
( Ez tehát kiesett, de azért Ők se tévedhetetlenek.
   néha bogarászni kellett ASM-ben is..  )


Általában ha bepipálok egy libraryt ,
az be is fordítja.. Csak a sajátokat kell def-ni..
Meg van egy buil_in.h , de azt alapból be szoktam.

Ahogy azSPI1_Write
az strlen is megy *s -el...   sima s-el pedig nem.
    pedig pointeres a meghatározás..
Jleneleg ugy fordul és fut a progi, de hibásan.
Amire nem jöttem rá, hogy a string első pár
betűje megy ki csak a modulban, és időnként
a widget-em kiírása  behülyül..
És ez csak a TXT-t is tartalmazó ( pointeres )
vidgetek-nál fordul elő !..
Ha azokat kilövöm, a többi grafikai elem jó!
  Ez nyomozgatom..

Köszi mindenkinek, kaptam jó ötleteket..
Holnap majd bogarászom, megpróbálgatom
sorra...

Üdv István






2013-09-25 19:09 keltezéssel, SZIGETI Szabolcs írta:
> Nagyon gyanús, hogy az strlen-nel van a baj, csak azt nem értem, hogy miért
> nem cost * char-t fogad a te strlened. Azt is vetted valahonnan, vagy a
> gyárit használod? Mert minden valamire való C környezetben az strlen(const
> char *). Így bármit át lehet neki adni.
> Lehet, hogy csak egy #include <string.h> hiányzik az elejéről? És akkor
> rájönne, hogy constnak van deklarálva.
>
> Szabolcs
>
>
> E
>
>
> 2013. szeptember 25. 18:58 elight at gmail.hu írta, <elight at gmail.hu>:
>
>> Nagyon köszi..
>>            a kis fejtágítást.
>>
>> Igy már sokkal világosabb..
>> És bevallom már értem,
>> amit ösztönösen elkövettem,
>> hogy (*s ) et írok be az SPI-nek..
>> Ugy ment , de a kérdés mégis megmaradt bennem.
>> Azért is hoztam szóba.
>>
>> Már éppen azon morfondíroztam,
>> hogy felfújom a pofám és írok
>> egy karakter számoló ciklust helyette..
>> De akkor esetleg a típus kényszerítéssel is próbálkozgatok..
>> Ebből annyi már bejött,  hogy az "strlen" -emnek valamiért
>> nem engedi a "const"  típusmódosítást..
>>    Lehet itt lenne a bibi . ?  .
>>
>> Üdv István
>>
>>
>> 2013-09-25 18:47 keltezéssel, SZIGETI Szabolcs írta:
>>> Hali!
>>>
>>> Olvasd el, amit előbb írtam. Ha a te strlen-ed valóban char *-ot vár,
>> akkor
>>> annak nem adhatsz át const char*-ot. Elvileg a fordító nem fogja engedni,
>>> hogy nem const pointernek átadjál const-ot, hiszen a const célja pont az,
>>> hogy jelezze, nem változtathatod meg.
>>> De az érdekes, hogy az strlen nem const*, mivel azokat a függvényeket,
>> amik
>>> nem hatnak vissza a pointeren keresztül mindig cons*-nak szokták
>>> deklarálni. Hiszen annak sima és const pointert is adhatsz, ráadásul
>> plusz
>>> biztonságot jelent, a függvény fejlesztése során, mert véletlenül sem
>> fogsz
>>> visszafelé változtatni a paramétereken keresztül.
>>>
>>> Ha az SPI1_Write unsigned short -ot vár, akkor nem kell segédváltozó,
>> simán
>>> a *s-et át kell tudnod adni, a fordító megoldja magától, hogy short-ot
>>> csináljon a char-ból. Ahol egyértelmű az automatikus konverzió, ott a
>>> fordító megcsinálja. Ahol nem, de értelmes, ott pedig castokkal magad
>>> kényszerítheted.
>>>
>>> Szabolcs
>>>
>>>
>>>
>>> 2013. szeptember 25. 18:37 elight at gmail.hu írta, <elight at gmail.hu>:
>>>
>>>> Köszi, megnéztem ..
>>>>
>>>> és nem ,  hanem
>>>>
>>>> unsigned short data
>>>>
>>>> ezek szerint egy változóba át is kellene szedegetnem
>>>> kilökés előtt..
>>>>
>>>> A példa program meg valószínűen pointeres
>>>> SPI átadást használhatott. Majd kiguberálom
>>>> belőle , hogy beigazolódjon.
>>>>
>>>> Történt , hogy egy nagy terjedelmű c++ -os
>>>> programból operálok át részeket PIC ben...
>>>> és már csak a stringes pointer aritmetika az
>>>> amin kerengek mint a gólya...
>>>>
>>>> Akkor legalább ez már megvan.
>>>>
>>>> De az
>>>>
>>>> int    strlen( char * )
>>>>
>>>> definiciójú függvényt is
>>>> kidobja illegál-ra
>>>>
>>>> A tényleges sor ami galibát okoz ilyesmi..
>>>>
>>>> CMD_Text(  unsigned int x; unsigned int y ; unsigned int chartype ;
>>>> const char *s )
>>>> {
>>>>       CMD_Start_WR(  SMD_SIZE*3 + strlen( s ) +   1 );   // itt fut az
>>>> "illegal pointer conversion" hibára ,
>>>> //  a többi sor ha kihagyom ténylegesen  jól lefut,
>>>>                      // csak éppen a parancs megnyitás kimarad.
>>>>       CMD_Funct_Send32( SMD_TEXT ) ;
>>>>     ...
>>>> }
>>>>
>>>>
>>>> 2013-09-25 18:21 keltezéssel, Bali Zoltan írta:
>>>>> Hali!
>>>>>
>>>>> Az "SPI1_Write(  s )" is pointert vár?
>>>>>
>>>>>
>>>>> Üdv.  Zoli
>>>>>
>>>>> 2013. 09. 25. 17:50 keltezéssel, elight at gmail.hu írta:
>>>>>> Sziasztok..
>>>>>>
>>>>>> Ezt miért dobhatja  ki a mikroC fordító?
>>>>>>
>>>>>> void Funct_SendSTR(  const char *s )
>>>>>> {
>>>>>>         do
>>>>>>         {
>>>>>>              SPI1_Write(  s ) ;     // ezen soron "illegal pointer
>>>> conversion"
>>>>>>         }   while ( *s++ != 1 );
>>>>>>
>>>>>> }
>>>>>>
>>>>>>
>>>>>> meg azt is kidobja pl hogy
>>>>>>
>>>>>>       if( strlen( s ) == x )
>>>>>> {
>>>>>>
>>>>>> }
>>>>>>
>>>>>> más C nyelvben ez menni szokott?
>>>>>> vagy nagyon benézek valami?
>>>>>>
>>>>>> a 'const' mindenképpen szükséges.
>>>>>> hogyan írnátok helyesen?
>>>>>>
>>>>>>
>>>>>> Az is kérdésem hogy
>>>>>>
>>>>>>          ( char * s  )   és  (  char  *s  )
>>>>>>
>>>>>> az ugyanaz, sajnos ezek a pointeres témák
>>>>>> általában összegabajodnak bennem.
>>>>>>
>>>>>>
>>>>>>
>>>>>> Üdv István
>>>>>>
>>>>>> -----------------------------------------
>>>>>>               elektro[-flame|-etc]
>>>>>>
>>>>>>
>>>>>>
>>>>> -----------------------------------------
>>>>>              elektro[-flame|-etc]
>>>>>
>>>> -----------------------------------------
>>>>             elektro[-flame|-etc]
>>>>
>>> -----------------------------------------
>>>             elektro[-flame|-etc]
>>>
>> -----------------------------------------
>>            elektro[-flame|-etc]
>>
> -----------------------------------------
>            elektro[-flame|-etc]
>



More information about the Elektro mailing list