【发布时间】:2019-11-07 14:57:57
【问题描述】:
所以我正在尝试编写自己的“malloc”库,但我的全局变量有问题。
在下面的代码中,您可以看到,我正在创建一个 int 指针以将整数写入 char 数组,并且该 int 指针指向我的 char 数组的第一个字节,认为它是整数的内存.
char myMemory[1048576];
int* pMem = (int*)(&myMemory[0]);
*pMem = (1048576-5);
myMemory[4] = 'f';
//... and so forth
对于最后一行,我收到以下错误消息:
redefinition of 'myMemory' with a different type 'int [4]' vs 'char [1048576]'
对于 *pMem = (...); 我得到以下内容
invalid operands to binary expression 'int*' and 'int*'
也许我不允许在全局范围内更改全局变量,当我在测试函数中执行相同的操作时一切正常。
我不可能在互联网上找到它,因为每个人都在问如何更改函数中的全局变量......
我希望有人可以帮助我,因为我认为否则我很快就会烧毁我的房子。提前谢谢你。
提姆
【问题讨论】:
-
显示重现问题的最小完整程序。
-
这些行是否在函数之外?
-
@Eugene Sh.是的,他们是
-
好吧,你不能把语句放在函数之外。我认为您可能希望从一个比
malloc更简单的项目开始,因为看起来您的一般 C 知识需要提高一点。 -
您可以对变量执行三项基本操作:define、initialize 和 assign。前两个可以在函数之外完成。第三个不能。但是,如果您甚至找到了初始化
myMemory的方法,它会将其从.bss部分移动到.data,从而有效地将可执行文件的大小增加了这个数组的大小(+1MB)。
标签: c char global-variables redefinition