#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char **createTwoDemsionArray(int count)
{
if (count > 1000)
{
return NULL;
}
char **p = (char**)malloc(count * sizeof(char*));
for (int i = 0; i < count; i++)
{
p[i] = (char*)malloc(1024*sizeof(char));
memset(p[i], 0x00, 1024 * sizeof(char));
}
return p;
}
void freeTwoDemsionArray(char **p,int count)
{
if (p == NULL)
{
return;
}
for (int i = 0; i < count; i++)
{
if (p[i] != NULL)
{
free(p[i]);
}
}
if (p != NULL)
{
free(p);
}
}
int main()
{
int num1 = 4;
int num2 = 102;
int num3 = 15;
//1初始化的是定义指针变量的时候,指针变量赋值成null
char ** myarray1 = NULL;
char **myarray2 = NULL;
char **myarray3 = NULL;
myarray1 = createTwoDemsionArray(num1);
if (myarray1 == NULL)
{
printf("func createTwoDemsionArray() error \n");
goto End;
}
myarray2 = createTwoDemsionArray(num2);
//2 释放的时候,判断是不是null
if (myarray2 == NULL)
{
freeTwoDemsionArray(myarray1, num1);
myarray1 = NULL;
//3 释放完毕以后再赋值成null,即便goto End依然去free myarray1 也没有问题
printf("func createTwoDemsionArray() error \n");
goto End;
}
myarray3 = createTwoDemsionArray(num3);
if (myarray3 == NULL)
{
printf("func createTwoDemsionArray() error \n");
goto End;
}
End:
if (myarray1 != NULL)
{
freeTwoDemsionArray(myarray1, num1);
myarray1 = NULL;
}
if (myarray2 != NULL)
{
freeTwoDemsionArray(myarray2, num2);
myarray2 = NULL;
}
if (myarray3 != NULL)
{
freeTwoDemsionArray(myarray3, num3);
myarray3 = NULL;
}
return 0;
}