本文介绍了从而导致错误的malloc函数(动态内存分配),当它是全球使用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 #包括LT&;&stdio.h中GT;
#包括LT&;&string.h中GT;
字符* Y;
Y =(字符*)malloc的(40); //这里给出了一个错误
诠释的main()
{
    的strcpy(Y,世界你好);
}


 错误:冲突的类型'Y'
错误:'Y'的previous声明在这里
警告:初始化将指针整数,未作投
错误:初始元素不是常数
警告:数据定义没有类型或存储类
警告:传递'的strcpy的ARG 1,使指针从整数,未投

现在真正的问题是,我们不能让全球范围内的动态内存分配?为什么它显示一个错误,当我使用全球的malloc?而code,没有错误的原理,如果我把的malloc 语句的主要功能或一些其他函数中。为什么会这样?

 #包括LT&;&stdio.h中GT;
#包括LT&;&string.h中GT;
字符* Y;
诠释的main()
{
    Y =(字符*)malloc的(40);
    的strcpy(Y,世界你好);
}


解决方案

您不能执行code的功能之外。你可以在全球范围内唯一要做的是声明变量(和编译时间常数初始化它们)。

的malloc 是一个函数调用,所以这是一个功能之外无效。

如果您初始化 malloc的一个全球性的指针变量从主(或任何其他功能真的),这将是提供给所有其他的功能,其中的变量范围(在你的榜样,包含文件中的所有功能)。

(注意,全局变量,应尽可能避免使用。)

#include<stdio.h>
#include<string.h>
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

Now the real question is, can't we make the dynamic memory allocation globally? Why does it show an error when I use malloc globally? And the code works with no error if I put malloc statement inside the main function or some other function. Why is this so?

#include<stdio.h>
#include<string.h>
char *y;
int main()
{
    y=(char *)malloc(40); 
    strcpy(y,"hello world");
}
解决方案

You can't execute code outside of functions. The only thing you can do at global scope is declaring variables (and initialize them with compile-time constants).

malloc is a function call, so that's invalid outside a function.

If you initialize a global pointer variable with malloc from your main (or any other function really), it will be available to all other functions where that variable is in scope (in your example, all functions within the file that contains main).

(Note that global variables should be avoided when possible.)

这篇关于从而导致错误的malloc函数(动态内存分配),当它是全球使用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-28 10:09