我正在尝试创建一个单词数组。创建这样的数组之间有什么区别:
char* myWords[10];
和
char* myWords = malloc(10*sizeof(char *))
我假设因为第一个自动发生,所以在函数执行结束时会收到内存。这是对的吗?
答案 0 :(得分:2)
这些是非常不同的类型。
第一个以通常(自动)方式创建指针数组。 10个指针在函数结束前有效。他们没有指出任何有效的东西,但每个都指向一个单独的字符串,可以从数组的每个元素访问。
第二个将一块内存分配给一个指向一个字符的指针。因此,您可能希望它指向一个字符串(通常最多40或80个字节)。内存有效直到你释放它,但指针是自动的,就像第一个一样。 (请注意,字符指针数组会衰减到char **
而不是char *
。)
答案 1 :(得分:0)
是的,第一个实际上被添加到堆栈中,因此一旦返回实际函数就会被破坏,第二个被添加到堆上。
答案 2 :(得分:0)
malloc数据分配给堆,另一个分配给堆栈。 Malloc将您的数据放在堆上,您必须自己控制它。完成数据后,您应该释放数据(检查malloc上的手册页),以便您没有内存泄漏。
也许这个网站为您提供更多见解: http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html