Je travaille sur un code pour l'école, et est ici le fragment de code que je vais avoir des problèmes avec:« realloc(): pointeur non valide » erreur
// Create file path
int size_path = 11;
char* path = malloc(size_path*sizeof(char));
path = "./storage/\0";
for(i = 0; i < size_filename; i++){
size_path++;
path = realloc(path, size_path*sizeof(char));
path[size_path-1] = filename[i];
}
path[size_path] = '\0';
Essentiellement, ce que je fais essaie de trouver l'existence d'un fichier (par exemple, test.txt
) et donc j'ai besoin d'utiliser access()
pour vérifier son existence, mais d'abord je dois construire le path
lui-même tel que path = "./storage/test.txt"
J'ai déjà utilisé la méthode ci-dessus pour analyser certains d'autres choses, donc je sais que la façon dont je le fais fonctionne, je pense juste qu'il me manque quelque chose ici parce que chaque fois que j'essaye d'exécuter le code, j'obtiens une erreur dans le compilateur: *** Error in ./a.out: realloc(): invalid pointer: 0x00000000004016c7 ***
Je suis curieux de voir quelle perspicacité vous pouvez me donner parce que je travaille sur ce bug depuis au moins une demi-heure et la communauté m'a aidé à résoudre de nombreux problèmes en quelques minutes, alors je Je suis sûr que c'est juste une chose hors-par-un, mais je ne peux pas vraiment comprendre où il serait. Merci d'avance!
EDIT: Comme je l'ai imaginé, j'ai eu la réponse à ma question en moins de 5 minutes. Il s'avère que j'ai fuit accidentellement la mémoire allouée dynamiquement en n'y mettant rien et en l'allouant de manière statique directement après. Au lieu de cela, j'ai utilisé strcpy(path, "./storage/")
et j'ai obtenu exactement la fonctionnalité que je recherchais. Je vous remercie!
Lire [demander] et en particulier la partie sur [les devoirs] (https://meta.stackoverflow.com/questions/334822/how-do-i-ask-and-answer-homework-questions). – Olaf
'path =" ./storage/\0 ";' assigne 'path' qui vient juste d'être initialisé avec' char * path = malloc (chemin_dimension * sizeof (char)); 'Cela fuit l'allocation précédente. – chux
Probablement, 'path =" ./storage/\0 ";' devrait être 'strcpy (chemin," ./storage/");' – ShadowRanger