【问题标题】:Can any one please help me what wrong with this code? [closed]有人可以帮我看看这段代码有什么问题吗? [关闭]
【发布时间】:2021-06-03 10:06:40
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
char *namefunct(void);

int main(int argc, char *argv[])
{
    printf("Hello, %s!!!\n", namefunct());  //namefunct is not returning tmp_name

}
char *namefunct(void)
{
    char *name = malloc(sizeof(char) * 10);
    scanf("%s", name);
    char *tmp_name = name;
    free(name);
    return tmp_name;
}

输出:你好,!!! //namefunct 没有返回 tmp_name 如何释放 namefunct() 中分配的内存?

【问题讨论】:

  • 错误告诉你有什么问题......? &amp;name_bufferchar**,那么是什么让你认为你可以将其视为 int*,至少不用告诉编译器你真的想做这么奇怪的演员表?
  • 您的 nkfunction 没有返回任何内容,但您将结果分配给了 name_buffer。编译器告诉你这是不可能的。
  • 您的nk 函数或多或少(基本上更少)想要返回局部变量的地址。你会遇到麻烦,因为函数返回后局部变量会消失。
  • 也许你应该说出你想要做什么。
  • 函数nk为什么要把int指针作为参数?

标签: c pointers cs50 custom-function


【解决方案1】:

好的,你动态分配了 10 个字节。然后你让“name”变量(一个字符指针)指向那个动态分配的块。然后你创建一个 char 指针,它指向 "name" 指向的同一个动态分配的块。然后你“free(name)”释放了“tmp_name”也指向的块。 “name”和“tmp_name”都指向可能已被另一个程序接管的已释放内存,本质上是返回一个指向垃圾值的指针。我推荐这个:

#include <stdio.h>
#include <stdlib.h>

char* namefunct(void);

int main(int argc, char* argv[])
{
    char* my_name = namefunct();
    printf("Hello, %s!!!\n", my_name);  //namefunct is not returning tmp_name
    free(my_name);

    return 0;
}
char* namefunct(void)
{
    char* name = malloc(sizeof(char) * 10);
    scanf("%s", name);
    return name;
}

或者,就像@Siddhant 发布的那样,您可以将 name 设为全局变量并在之后释放它

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-04
    • 1970-01-01
    • 2020-02-21
    • 2020-10-30
    • 2010-11-08
    • 2017-04-22
    • 1970-01-01
    相关资源
    最近更新 更多