理解为什么我需要malloc

时间:2015-11-12 21:16:36

标签: c malloc

我想了解为什么我需要在此使用malloc。我的代码的目标是将$('#event-form').on('submit', function(e){ // do your validation code // ... // if all is ok $.ajax(...) // else e.preventDefault(); }) "]"")"分开。因此";""];" "]"";"改为");" ")"";"被用作字符串数组。我不记得字符串数组的技术名称。这很有效,但它可以节省我很多时间来理解为什么会发生这种情况。

ptr

1 个答案:

答案 0 :(得分:0)

声明

char *ptr[buflen];

创建一个指针数组。如果ptr是局部变量(函数内部),则指针最初是垃圾值,它们不指向有效内存。如果ptr是全局的或静态的,则指针最初为NULL

在任何情况下,在使用其中一个指针指向字符串之前,字符串需要在某处内存中。

给定行

char *ptr[3] = {"foo", "bar", "bletch"};

编译器负责为字符串分配内存,然后将指针放入数组中。

但是如果字符串不是常量,那么你必须自己为字符串分配内存。这是malloc的作用。它分配您请求的字节数,并返回指向该内存的指针。您可以将该指针保存在数组中,然后使用strcpy或其他字符串函数将字符串放入该内存中。

或者您可以一次复制一个字符,这就是您的代码所做的事情:

ptr[x+1] = malloc(2);     // reserves two bytes of memory, and keeps the pointer 
                          // to that memory in the array of pointers
ptr[x+1][0] = str[1];     // copies a character into the first byte of the memory
ptr[x+1][1] = '\0';       // marks the second byte as the end of the string

所以现在你在内存中有一个字符串,并且在指针数组中有一个指向该字符串的指针。