【发布时间】:2013-05-31 03:56:16
【问题描述】:
好的,目前我正在为简历编写内核。在编写我的内存管理单元时,我碰到了一堵砖墙。
int address = (int)malloc(sizeof(Test))
consoleWriteString("Variable Address:\n");
consoleWriteInteger(address);
char* f = (void*)address;
consoleWriteString("\nVariable Address:\n");
consoleWriteInteger((int)&f); // Should print off the same as above
从逻辑上讲,两者的输出应该相同。不过有些地方出了问题。因为我的输出如下。
Variable Address: 47167
Variable Address: 1065908
经过长时间的测试和调试,我终于屈服了,决定问堆栈溢出问题。此外,如果您发现任何语法错误,请忽略它们。顺便说一句,这一切都在 C 中,所有函数都是自定义的,包括 malloc,但我已经确定错误不在于该函数或任何其他事实。我相信这只是我对指针和施法的愚蠢,但是当我错过了一些超级简单的事情时不要嘲笑我。
谢谢大家
【问题讨论】:
-
分配指向整数的指针并使用强制转换使你的编译器静音?这就是灾难之路。为什么不使用
void *address或char *address?如果原因是没有consoleWritePointer,那就写一个! -
感谢您提供的信息,对于 consoleWritePointer,我将如何继续编写它?只需将其转换为十六进制地址,然后从那里打印?
-
如果您已经有符合标准 C 的 printf,请使用
%p说明符作为指针;如果不是,则将指针值转换为无符号整数值并打印(或使用联合,插入 ptr 并读取无符号值)。 -
实际上我还没有标准的 printf,为了做到这一点,我需要进行字符串操作,这需要内存分配。这整个问题源于我试图测试我的 malloc,发现它有效,但是当我试图在一个地址创建一个 char 数组时,它会被搞砸。谢谢你告诉我如何打印它,每件事都有帮助!
标签: c pointers memory-management memory-address