【发布时间】:2010-09-25 16:19:13
【问题描述】:
我想在内存中存储一个字符串,稍后再读取:
$$->desc.constant->base.id = (char*)malloc(200);
sprintf($$->desc.constant->base.id, "%f", $1);
printf("->%s\n", $$->desc.constant->base.id); //LINE A
printf("->%i\n", $$->desc.constant); //LINE B
//SOME OTHER CODE
//Then, later on in a function call:
printf("%i", expr->desc.constant); // LINE D
printf("%s", expr->desc.constant->base.id); // LINE C
虽然 B 行和 D 行显示相同的地址,但 C 行中的 printf 失败并出现分段错误。我错过了什么?
任何帮助将不胜感激!
【问题讨论】:
-
你不应该从 malloc 转换返回值。此外,您应该测试它是否为 0。如果 malloc 返回 0,则发生错误。阅读stanford.edu/~blp/writings/clc/malloc-cast.html
-
这真的是 C 吗?我从未见过美元字符在 C 中用作变量名。
-
这可能是 Yacc 语法动作的一部分。
-
$ 在 C 标识符中使用在技术上是非法的;如果您启用某个异常,某些编译器会允许它。使用 gcc,您可以使用 -fdollars-in-identifiers 选项来做到这一点。
标签: c struct pointers segmentation-fault