Función Malloc (asignación de memoria dinámica) que produce un error cuando se usa globalmente

#include #include char *y; y=(char *)malloc(40); // gives an error here int main() { strcpy(y,"hello world"); } 

 error: conflicting types for 'y' error: previous declaration of 'y' was here warning: initialization makes integer from pointer without a cast error: initializer element is not constant warning: data definition has no type or storage class warning: passing arg 1 of `strcpy' makes pointer from integer without cast 

Ahora la pregunta real es, ¿no podemos hacer la asignación de memoria dinámica globalmente? ¿Por qué muestra un error cuando uso malloc globalmente? Y el código funciona sin error si pongo la statement malloc dentro de la función principal o alguna otra función. ¿Por qué esto es tan?

 #include #include char *y; int main() { y=(char *)malloc(40); strcpy(y,"hello world"); } 

No puedes ejecutar código fuera de las funciones. Lo único que puede hacer a nivel global es declarar variables (e inicializarlas con constantes de tiempo de comstackción).

malloc es una llamada de función, por lo que no es válido fuera de una función.

Si inicializa una variable de puntero global con malloc desde su principal (o cualquier otra función realmente), estará disponible para todas las demás funciones donde esa variable esté dentro del scope (en su ejemplo, todas las funciones dentro del archivo que contiene el main ).

(Tenga en cuenta que las variables globales deben evitarse cuando sea posible).

Bueno, no se trata de usar malloc globalmente. su proceso malloc debe residir dentro de cualquier función, principal o cualquier otra función definida por el usuario . A nivel mundial solo se puede delare la variable. Como ‘y’ se declara globalmente, malloc es una llamada de función. Eso debe residir dentro de cualquier función. No solo malloc, no puede llamar a ninguna función como ha llamado aquí. Solo puedes declarar la función como global o local allí .

No puede utilizar una llamada de función al inicializar una variable estática o global. En la siguiente secuencia de código, declaramos una variable estática y luego intentamos inicializarla usando malloc:

static int *pi = malloc(sizeof(int));

Esto generará un mensaje de error en tiempo de comstackción. Lo mismo sucede con las variables globales, pero se puede evitar para las variables estáticas utilizando una statement separada para asignar memoria a la variable de la siguiente manera. No podemos usar una instrucción de asignación separada con variables globales porque las variables globales se declaran fuera de una función y el código ejecutable, como la instrucción de asignación, debe estar dentro de una función: static int *pi; pi = malloc(sizeof(int)); static int *pi; pi = malloc(sizeof(int));

Desde el punto de vista del comstackdor, hay una diferencia entre usar el operador de inicialización, =, y usar el operador de asignación, =.

    Intereting Posts