【发布时间】:2015-12-26 07:22:29
【问题描述】:
我目前正在学习如何在 C 中使用指针和内存分配,并编写一个简单的代码 sn-p 来尝试使用指针打印字符串。我现在拥有的是:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char *aString(void)
{
char str[20];
strcpy(str, "Hello World!");
return str;
}
int main(int argc, char **argv)
{
char *ptr = malloc(20);
ptr = aString();
printf("%s\n", ptr);
free(ptr);
exit(0);
}
这只是打印一个空行并告诉我对 free 的调用使用了一个无效的指针。谁能花时间解释一下我在哪里思考问题?
编辑:感谢您的所有答案,我正在阅读所有答案。
【问题讨论】:
-
free只能用于malloc(和朋友)分配的空间。ptr = aString();表示将ptr指向与 malloc 块不同的位置。这并不意味着复制字符。 -
str[]是堆栈上的局部变量。当它“超出范围”时,即当函数退出时,对变量的任何访问都是未定义的行为,并可能导致段错误事件。我的建议:在 main() 中声明 str[] 数组并将指向 str[] 的指针传递给 aString() 函数
标签: c pointers memory allocation