J'apprends le C++. J'essaie d'apprendre cette allocation de mémoire dynamique. Dans le code ci-dessous, j'essaie d'allouer de la mémoire en utilisant malloc
et realloc
.Réallocation de mémoire dynamique à l'aide de realloc
int main (void) {
char *g = (char*) malloc (sizeof(char) * 2);
g = "ab";
g = (char*) realloc (g, sizeof(char) * 200);
strcpy (g, "cdefg");
cout << g << endl;
return 0;
}
Je reçois erreur de segmentation erreur lorsque j'exécute ce code.
J'ai vu d'autres threads SO recommandant d'utiliser soit vector
ou new
au lieu d'utiliser l'approche ci-dessus. Depuis, j'essaie d'apprendre cette approche, donc ces réponses ne s'appliquent pas à ma question.
J'ai rencontré un scénario où cette approche serait bien ajustée, par exemple, Si je lis un fichier texte brut en utilisant la fonction ifstream.read
et en lisant, disons 1024bytes de celui-ci. Maintenant, si je veux m'assurer que je ne lis pas un mot qui est cassé dû à la taille de 1024bytes je dois lire plus loin de cette position en utilisant ifstream.get
pour atteindre jusqu'à ce qu'un caractère d'espace soit trouvé. Dans ce scénario, j'ai besoin d'ajuster légèrement le tampon (qui est de 1024). Mon intention est d'utiliser realloc
ici pour lui assigner plus de mémoire.
S'il vous plaît n'hésitez pas à me corriger si je me trompe n'importe où.
Si vous apprenez C++, vous devriez utiliser 'new' et' delete'. –
À TOUS GURUS: S'il vous plaît envisager de répondre à mon approche en lisant la partie fichier? Est-ce logique?Merci à l'avance – learner
voir la réponse par sharptooth, aussi je voudrais mentionner que 2 caractères ne sont pas assez pour tenir "ab" en raison de la terminaison nulle – sellibitze