2016-11-30 1 views
-2

Cela fait partie de mon code:Pourquoi la longueur de la matrice est-elle toujours la même après realloc?

array = (int *) malloc(5*sizeof(int)); 

il est initialisées et a des valeurs, je saute cette étape ici pour plus d'espace. Ce que je voulais accomplir ici est de supprimer le premier membre du tableau et de déplacer le tableau entier d'un pas vers la gauche. Pourtant lorsque je tente de vérifier la longueur du tableau en utilisant:

strlen(array); 

-je obtenir la valeur 5. Il semble que realloc ne fonctionne pas correctement, parce que quand j'essaie aussi d'imprimer le cinquième élément d'un tableau, qui devrait être après realloc hors gamme de tableaux, il imprime la valeur que je lui ai précédemment donnée. Comment est-ce possible? Est-ce que quelqu'un peut me dire où je me trompe et qu'est-ce qui me manque?

+0

1) Un pointeur n'est pas un tableau. 2) C n'a pas de type de chaîne distinct. 3) Que dit votre livre C sur les chaînes strlen et C en général? Qu'avez-vous trouvé par une simple recherche? – Olaf

+0

Pourquoi appliquez-vous 'strlen' à ce qui semble être un tableau de' int's? Qu'est-ce que vous attendez de «strlen» à faire dans ce cas? Et qu'est-ce que le compilateur vous a dit à propos de votre expression 'strlen (array)'? – AnT

Répondre

2

strlen calcule la longueur d'une chaîne à terminaison NUL. Il est 5 par chance (rencontre un zéro à un certain point): comportement indéfini. Il s'agit d'une taille en octets. La taille de votre tableau est 5*sizeof(int) donc probablement 20 ou 40 selon la taille réelle de int. Pas ce que tu cherches quand même. (! En dehors de son stockage)

Il n'y a aucun moyen de dire la « longueur » d'un bloc attribué par malloc ou realloc

(mais votre opération realloc est valide)

Note: variations de cette erreur serait de s'appuyer sur sizeof(array) qui est la taille du type de pointeur car array est un pointeur, pas un tableau!