Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]fread_s

    ciao.
    Ho compilato un progetto opensource(pnglib) ma credo che non si il fulcro del problema.
    Il problema nasce quando pnglib invoca la funzione fread_s che mi da un errore su

    codice:
    /* define locking/unlocking version */
    size_t __cdecl fread_s(
        void *buffer,
        size_t bufferSize,
        size_t elementSize,
        size_t count,
        FILE *stream
    )
    {
        size_t retval = 0;
    
        if (elementSize == 0 || count == 0)
        {
            return 0;
        }
    
    
        // only checking for stream == NULL here for _lock_str()
        // the rest of the validation is in _fread_nolock_s()
        if (stream == NULL )
        {
            if (bufferSize != SIZE_MAX)
            {
                memset(buffer, _BUFFER_FILL_PATTERN, bufferSize);
            }
    
            _VALIDATE_RETURN((stream != NULL), EINVAL, 0);
        }
    
        _lock_str(stream);//ERRORE
        __try
        {
            /* do the read; _fread_nolock_s will make sure we do not buffer overrun */
            retval = _fread_nolock_s(buffer, bufferSize, elementSize, count, stream);
        }
        __finally
        {
            _unlock_str(stream);
        }
    
        return retval;
    }
    l'errore è sul _lock_str(stream); e in particolare su questa funzione:
    codice:
    void __cdecl _lock_file (
            FILE *pf
            )
    {
            /*
             * The way the FILE (pointed to by pf) is locked depends on whether
             * it is part of _iob[] or not
             */
            if ( (pf >= _iob) && (pf <= (&_iob[_IOB_ENTRIES-1])) )
            {
                /*
                 * FILE lies in _iob[] so the lock lies in _locktable[].
                 */
                _lock( _STREAM_LOCKS + (int)(pf - _iob) );
                /* We set _IOLOCKED to indicate we locked the stream */
                pf->_flag |= _IOLOCKED;
            }
            else
                /*
                 * Not part of _iob[]. Therefore, *pf is a _FILEX and the
                 * lock field of the struct is an initialized critical
                 * section.
                 */
                EnterCriticalSection( &(((_FILEX *)pf)->lock) );/////ERRORE
    }
    qui EnterCriticalSection( &(((_FILEX *)pf)->lock) );/////ERRORE

    quello che non riesco a capire è che oltre al file .png il progetto legge altri file con la stessa dinamica , solo che queste letture vanno tutte a buon fine , funziona anche il lock, solo il file .png ha questo problema, ho provato a guradare i permessi ma sembra tutto ok.
    grazie.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Ho tre perplessità:
    1) il codice che hai riportato non è certo della libreria pnglib di cui parli, ma delle librerie di sistema che usi. Librerie che credo siano C, non C++ giusto? Potresti riportare anche da che file hai estratto quelle parti di codice?
    2) hai scritto pnglib... sei sicuro? non è che invece è libpng, ben più nota? Potresti riportare il link della libreria png di cui parli?
    3) sarebbe meglio che riportassi l'errore tale e quale ti appare in esecuzione e possibilmente con lo stacktrace.
    Ciao.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Originariamente inviato da c0der
    Ho tre perplessità:
    1) il codice che hai riportato non è certo della libreria pnglib di cui parli, ma delle librerie di sistema che usi. Librerie che credo siano C, non C++ giusto? Potresti riportare anche da che file hai estratto quelle parti di codice?
    2) hai scritto pnglib... sei sicuro? non è che invece è libpng, ben più nota? Potresti riportare il link della libreria png di cui parli?
    3) sarebbe meglio che riportassi l'errore tale e quale ti appare in esecuzione e possibilmente con lo stacktrace.
    Ciao.
    1)si le librerie sono in c
    2)si, hai ragione è libpng
    3)l'errore era che le proprietà di configurazione della dll di libpng dovevano essere le stesse del mio progetto, inoltre non avevo incluso una libreria , la zlib.
    Ho risolto con una lib statica e aggiungendo la zlib.lib dopo averla compilata.
    grazie, comunque c0der.
    ciao.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.