Malloc vs自动创建数组

时间:2015-04-01 18:56:16

标签: c

我正在尝试创建一个单词数组。创建这样的数组之间有什么区别:

char* myWords[10];

char* myWords = malloc(10*sizeof(char *))

我假设因为第一个自动发生,所以在函数执行结束时会收到内存。这是对的吗?

3 个答案:

答案 0 :(得分:2)

这些是非常不同的类型。

第一个以通常(自动)方式创建指针数组。 10个指针在函数结束前有效。他们没有指出任何有效的东西,但每个都指向一个单独的字符串,可以从数组的每个元素访问。

第二个将一块内存分配给一个指向一个字符的指针。因此,您可能希望它指向一个字符串(通常最多40或80个字节)。内存有效直到你释放它,但指针是自动的,就像第一个一样。 (请注意,字符指针数组会衰减到char **而不是char *。)

答案 1 :(得分:0)

是的,第一个实际上被添加到堆栈中,因此一旦返回实际函数就会被破坏,第二个被添加到堆上。

答案 2 :(得分:0)

malloc数据分配给堆,另一个分配给堆栈。 Malloc将您的数据放在堆上,您必须自己控制它。完成数据后,您应该释放数据(检查malloc上的手册页),以便您没有内存泄漏。

也许这个网站为您提供更多见解: http://gribblelab.org/CBootcamp/7_Memory_Stack_vs_Heap.html