我试图从函数返回一个字符串数组,然后释放它使用的内存.代码如下:
int main(int argc, const char * argv[])
{
for (int m = 0; m < 10000; m++) {
char **data = dataTest();
int i = 0;
while(data[i]) {
printf("%p ",data[i]);
free(data[i]);
i++;
}
printf(" address= %p.\n",data);
free(data);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是功能:
char **dataTest()
{
char *row[] = {"this", "is", "a", "data", "string", NULL};
char **str = row;
char **dataReturn = (char **) malloc(sizeof(char *) * 6);
int i = 0;
while (*str) {
dataReturn[i] = malloc(sizeof(char) * strlen(*str)); …Run Code Online (Sandbox Code Playgroud) 就一维数组而言,其数组名称也是第一个元素的地址.所以可以将它分配给指针,如下所示:
char data[5];
char* p_data=data;
Run Code Online (Sandbox Code Playgroud)
所以我认为它应该与二维数组相同.数组名称应该是第一个元素地址的地址.所以,我想做这样的事情:
char data[5][5];
char** pp_data=data;
Run Code Online (Sandbox Code Playgroud)
然后我收到警告说指针类型char**与之不兼容char[ ][ ].
为什么会这样?我理解指针和数组概念错了吗?