J'ai 2 tableaux avec des coordonnées et je veux les copier dans un tableau. J'ai utilisé 2 pour les boucles et son fonctionnement, mais je veux savoir, si je pouvais le faire sans eux, je ne sais pas comment utiliser memcpy dans cette situation. Voici mon code:Comment concaténer deux tableaux en C en utilisant memcpy?
int *join(int *first, int *second,int num, int size) {
int *path= NULL;
int i = 0 , j = 0;
path = (int*) malloc (2*size*sizeof(int));
for(i = 0 ; i < num; i++) {
path[i * 2] = first[i * 2];
path[i * 2 + 1] = first[i * 2 + 1];
}
for(i = num; i < size ; i++) {
path[(i*2)] = second[(j+1)*2];
path[(i*2)+1] = second[(j+1)*2 +1];
j++;
}
return path;
}
[S'il vous plaît voir cette discussion sur les raisons de ne pas jeter la valeur de retour de 'malloc()' et de la famille dans 'C'.] (http://stackoverflow.com/q/605845/2173917). –
Ce 'chemin [(i * 2) +1]' écrit dans la mémoire invalide avec la dernière itération. – alk
Votre allocation de mémoire n'utilise pas la bonne taille. Vous devriez utiliser '(size + num) * sizeof (int)', ne devriez-vous pas - ou s'il y a deux fois plus d'entrées dans chaque tableau que la valeur de 'size' ou' num', puis multiple par 2 aussi ? À l'heure actuelle, si le second tableau est plus petit que le premier, vous piétinez hors des limites; si le second tableau est plus grand que le premier, vous gaspillez de l'espace (ce qui est beaucoup moins un problème). Vous devriez vérifier que l'allocation a réussi avant d'utiliser le nouvel espace; les allocations de mémoire échouent. Si vous obtenez les bases correctement, alors 'memcpy (chemin, premier, 2 * num * sizeof (int));'. –