我想知道,在以下情况下,'stringvar'使用的内存是否在method1执行完后被释放?
// Just some method
void method2(char* str)
{
// Allocate 10 characters for str
str = malloc(10 * sizeof(char));
}
// Just another method
void method1()
{
char* stringvar;
method2(stringvar);
// Is the memory freed hereafter, or do I need to call free()?
}
我问这个问题是因为如果我在method1的结尾处放置一个“free(stringvar)”,我会收到一个警告,即stringvar在method1内未初始化(这是真的)。
str
是指向指针的指针,所以在使用之前必须先对其进行解引用。*str
是一个指向char
的单个指针,在这种情况下它恰好表示一个字符串。因此,是的,*str[x]
将获取由*str
指向的字符串的第x个字符。但是,在method2
之外,您已经有了一个指向char
的指针,因此说stringvar[x]
就足够了。 - Andrew Keetonmalloc
的结果强制转换的原因有两个:1)当处理双指针等时,将malloc
的“返回类型”放在那里可以帮助我快速浏览它,2)如果我的指针出错了(比如我说str =
而不是*str =
),那么编译器会让我知道。我知道http://c-faq.com/malloc/mallocnocast.html,但我总是使用高警告进行编译,所以如果我没有包括`malloc`,我会注意到的。 - Andrew Keeton