我想知道为什么下面的代码isnt't工作分配内存和保存串在C
int main(int argc, char **argv)
{
char *test = (char*) malloc(12*sizeof(char));
test = "testingonly";
free(test);
}
考虑这件事后,我的假设是,我第一次在内存12个字符,但在分配分配空间下一行在栈上创建一个char数组,并将其内存地址传递给测试。所以free()试图释放堆栈中不允许的空间。那是对的吗?
那么在堆上保存字符串的正确方法是什么?以下是常用的方法吗?
int main(int argc, char **argv)
{
char *test = (char*) malloc(12*sizeof(char));
strcpy(test, "testingonly");
free(test);
}
第一溶液示出了经典的内存泄漏;你得到一个指向一些分配的内存的指针,然后当把指针指向字符串文字指向'test'时,它就失去了唯一的引用。此后,没有合法的方式来引用分配的内存 - 泄漏。 – 2011-12-22 06:44:32
永远不要在C中绑定malloc的结果,这是毫无意义的,只能隐藏错误和编译器警告。 – Lundin 2011-12-22 07:37:29
是 - 使用'strcpy'或'strncpy'或'memcpy'。 strncpy比strcpy更好,因为它有助于避免在最多N个字符处复制时出现缓冲区溢出问题。 – 2011-12-22 08:55:29