Utilisation de WindowsQu'est-ce qui pourrait provoquer un programme Labwindows/CVI C à détester le numéro 2573?
Je lis donc à partir d'un fichier binaire une liste de valeurs de données int non signées. Le fichier contient un certain nombre d'ensembles de données répertoriés séquentiellement. Voici la fonction de lire un seul jeu de données à partir d'un char * pointant vers le début de celui-ci:
function read_dataset(char* stream, t_dataset *dataset){
//...some init, including setting dataset->size;
for(i=0;i<dataset->size;i++){
dataset->samples[i] = *((unsigned int *) stream);
stream += sizeof(unsigned int);
}
//...
}
Où read_dataset dans un tel contexte que cela:
//...
char buff[10000];
t_dataset* dataset = malloc(sizeof(*dataset));
unsigned long offset = 0;
for(i=0;i<number_of_datasets; i++){
fseek(fd_in, offset, SEEK_SET);
if((n = fread(buff, sizeof(char), sizeof(*dataset), fd_in)) != sizeof(*dataset)){
break;
}
read_dataset(buff, *dataset);
// Do something with dataset here. It's screwed up before this, I checked.
offset += profileSize;
}
//...
Tout se passe à merveille jusqu'à ce que ma boucle lit la Numéro 2573. Tout à coup, il commence à cracher des nombres aléatoires et énormes.
Par exemple, ce qui devrait être
...
1831
2229
2406
2637
2609
2573
2523
2247
...
devient
...
1831
2229
2406
2637
2609
0xDB00000A
0xC7000009
0xB2000008
...
Si vous pensez que ces chiffres hexagonaux semblent suspectes, vous avez raison. Active les valeurs hexagonales pour les valeurs qui ont été modifiées sont vraiment familiers:
2573 -> 0xA0D
2523 -> 0x9DB
2247 -> 0x8C7
Donc, apparemment ce nombre 2573 provoque mon pointeur de flux pour obtenir un octet. Cela reste jusqu'à ce que l'ensemble de données suivant soit chargé et analysé, et que Dieu m'en interdise le numéro 2573. J'ai vérifié un certain nombre d'endroits où cela se produit, et chacun d'eux a commencé sur 2573.
Je ne suis pas si talentueux dans le monde de C. Ce qui pourrait causer cela est complètement et entièrement opaque pour moi.
Bon endroit (et bien fait - afin de faire à 15 caractères!) –
Merci monsieur, je comprends l'erreur de mes façons (et oui, j'ai oublié le "b"). –
J'avais l'habitude d'oublier occasionnellement le "b", et reconnu les symptômes. –