【发布时间】:2018-05-09 14:20:27
【问题描述】:
基本上,我的代码中有一个链表结构,
struct node{
char* val;
struct node *next;
};
然后我尝试对它做一些事情......
...
addr = malloc(sizeof(struct node));
addr->val = malloc(72);
addr->val = "";
snprintf(addr->val, 1000, "%s", ident);
...
... 这给了我 snprintf 的分段错误。 Valgrind 说以下内容
Process terminating with default action of signal 11 (SIGSEGV)
==10724== Bad permissions for mapped region at address 0x40566B
==10724== at 0x4EB0A32: vsnprintf (vsnprintf.c:112)
==10724== by 0x4E8F931: snprintf (snprintf.c:33)
==10724== by 0x4016CC: id (Analyzer.c:267)
...
相对于 C++,我对 C 相当陌生,但我认为在 char* 上调用 malloc 应该使其有效,特别是因为我可以初始化和打印它,所以我不明白为什么 snprintf 不会工作。 我还让我的程序打印出两个变量的地址,而 valgrind 抱怨的地址确实来自 addr->val。
我也尝试使用 strcpy 代替 snprintf,但结果相同。
谢谢。
【问题讨论】:
标签: c segmentation-fault printf strcpy