Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Divisione delle dimensioni di un puntatore per un altro valore
Osservazioni:
Questo avviso indica che un calcolo delle dimensioni potrebbe non essere corretto. Per calcolare il numero di elementi in una matrice, a volte si divide la dimensione della matrice in base alle dimensioni del primo elemento. Tuttavia, quando la matrice è effettivamente un puntatore, il risultato è in genere diverso da quello previsto.
Se il puntatore è un parametro di funzione e le dimensioni del buffer non sono passate, non è possibile calcolare il buffer massimo disponibile. Quando il puntatore viene allocato in locale, è necessario usare le dimensioni usate nell'allocazione.
Nome dell'analisi del codice: DIVIDING_SIZEOF_POINTER
Esempio
Il codice seguente genera l'avviso C6384:
#include <windows.h>
#include <TCHAR.h>
#define SIZE 15
void f( )
{
LPTSTR dest = new TCHAR[SIZE];
char src [SIZE] = "Hello, World!!";
if (dest)
{
_tcsncpy(dest, src, sizeof dest / sizeof dest[0]);
}
}
Per correggere questo avviso, passare le dimensioni del buffer come illustrato nel codice seguente:
#include <windows.h>
#include <TCHAR.h>
#define SIZE 15
void f( )
{
LPTSTR dest = new TCHAR[SIZE];
char src [SIZE] = "Hello, World!!";
if (dest)
{
_tcsncpy(dest, src, SIZE);
}
}
Per correggere questo avviso usando la funzione _tcsncpy_sstringa sicura , usare il codice seguente:
void f( )
{
LPTSTR dest = new TCHAR[SIZE];
char src [SIZE] = "Hello, World!!";
if (dest)
{
_tcsncpy_s(dest, SIZE, src, SIZE);
}
}
L'uso di new e delete presenta molte insidie in termini di perdite di memoria ed eccezioni. Per evitare completamente questi tipi di potenziali perdite, usare i meccanismi forniti dalla libreria standard C++ (STL). Sono inclusi shared_ptri contenitori , e , unique_ptrad esempio vector. Per altre informazioni, vedere Puntatori intelligenti e libreria standard C++.