Recién comencé a estudiar C, y cuando hice un ejemplo sobre pasar puntero a puntero como parámetro de una función, encontré un problema.
Este es mi código de muestra:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int* allocateIntArray(int* ptr, int size){
if (ptr != NULL){
for (int i = 0; i < size; i++){
ptr[i] = i;
}
}
return ptr;
}
void increasePointer(int** ptr){
if (ptr != NULL){
*ptr += 1; /* <----------------------------- This is line 16 */
}
}
int main()
{
int* p1 = (int*)malloc(sizeof(int)* 10);
allocateIntArray(p1, 10);
for (int i = 0; i < 10; i++){
printf("%d\n", p1[i]);
}
increasePointer(&p1);
printf("%d\n", *p1);
p1--;
free(p1);
fgets(string, sizeof(string), stdin);
return 0;
}
El problema ocurre en la línea 16, cuando modifico *ptr+=1
a *ptr++
. El resultado esperado debería ser toda la matriz y el número 1, pero cuando uso*ptr++
el resultado es 0.
¿Hay alguna diferencia entre +=1
y ++
? Pensé que los dos son lo mismo.
allocateIntArray
es un mal nombre, ya que parece ser malloc
la matriz de la función, pero no lo hace. Sugiero en su fillIntArray
lugar. 2) No utiliza el valor de retorno de allocateIntArray
. Le sugiero que cambie el tipo de retorno a void
. 3) No debe if (ptr != NULL)
en función de increasePointer
ser if (*ptr != NULL)
? 4) El reparto malloc
es innecesario. Ver el comentario de Sourav arriba. 5) Esto: for (int i = 0; i < 10; i++){ printf("%d\n", p1[i]); }
y printf("%d\n", *p1); p1--;
debe incluirse if(p1 != NULL)
. 6) string.h
no se usa.
p+=1
es como ++p
, no comop++
string
.