【发布时间】:2018-02-10 10:24:58
【问题描述】:
我对 char 指针的概念有点困惑,所以我编写了一个简单的代码,只打印用户(我)提供的我的名字。我也想练习 malloc,所以我引用了指向 RAM 中某个内存的指针,但我真的不知道在 "sizeof(char) *" 后面放什么,因为那是用户输入,尚未决定。 另外,在这样做之后,我释放了内存,但我在命令行上收到一条错误消息:
*** Error in `./char': double free or corruption (fasttop): 0x00000000017fe030 ***
Aborted
好像我两次释放了相同的内存,但我不知道要删除或添加什么。请帮忙!
#include <stdio.h>
#include <cs50.h>
int main (void)
{
char *strings = malloc(sizeof(char) * 10);
printf("What is your name?\n");
//wait for use to type his/her name
strings = get_string();
printf("Hello %s\n", strings);
free (strings);
return 0;
}
【问题讨论】:
-
什么是 get_string ?是C语言定义的吗?您应该通过分配的内存来获取字符串并在那里填充数组。不覆盖。请添加
get_string的代码 -
根据cs50.stackexchange.com/questions/21617/…的回答,
cs50.h的函数名是GetString()而不是get_string()。 -
运行它应该没有问题,只是内存泄漏。你是复制粘贴还是重新输入?
-
@rsp 根据CS50 reference,是
get_string。我认为那张海报拼错了。 -
为了方便大家回答问题,请将
get_string返回分配有malloc的char*的信息添加到问题中。没有多少人会搜索 CS50 文档并进行检查。
标签: c pointers char malloc cs50