C/C++二级指针内存模型
内存模型视图
二级指针内存分配
char** getspace(int num)
{
char** p2 = (char**)malloc(sizeof(char*)*num);
int i;
for (i = 0;i < num;i++)
{
p2[i] = (char*)malloc(sizeof(char) * 100);
sprintf(p2[i], "%d%d%d", i + 1, i + 2, i + 3);
}
return p2;
}
二级指针内存释放
void freeP(char** p, int num)
{
{
int i;
for (i = 0;i < num;i++)
{
free(p[i]);
p[i] = NULL;
}
free(p);
p = NULL;
}
}
源代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
char** getspace(int num)
{
char** p2 = (char**)malloc(sizeof(char*)*num);
int i;
for (i = 0;i < num;i++)
{
p2[i] = (char*)malloc(sizeof(char) * 100);
sprintf(p2[i], "%d%d%d", i + 1, i + 2, i + 3);
}
return p2;
}
//打印
void myPrint(char** p,int num)
{
int i;
for (i = 0;i < num;i++)
{
printf("%s \n", p[i]);
}
}
//排序
void sortP(char** p, int num)
{
char buf[100] = {};
int i;
for (i = 0;i < num;i++)
{
for (int j = i; j < num; j++)
{
if (strcmp(p[i], p[j]) < 0)
{
strcpy(buf, p[i]);
strcpy(p[i], p[j]);
strcpy(p[j], buf);
}
}
}
}
//释放内存
void freeP(char** p, int num)
{
{
int i;
for (i = 0;i < num;i++)
{
free(p[i]);
p[i] = NULL;
}
free(p);
p = NULL;
}
}
int main(int argc, char* argv[])
{
char** p = NULL;
int i = 0;
int num = 5;
//p2 = (char**)malloc(sizeof(char*)*num);
//for (i = 0;i < num;i++)
//{
// p2[i] = (char*)malloc(sizeof(char) * 100);
// sprintf(p2[i], "%d%d%d", i + 1, i + 2, i + 3);
//}
p = getspace(num);
//排序之前打印
//for (i = 0;i < num;i++)
//{
// printf("%s \n", p2[i]);
//}
myPrint(p, num);
//排序(按指针交换数据)
//char *tmp = NULL;
//for (i = 0;i < num;i++)
//{
// for (int j = i; j < num; j++)
// {
// if (strcmp(p2[i], p2[j]) < 0)
// {
// tmp = p2[i];
// p2[i] = p2[j];
// p2[j] = tmp;
// }
// }
//}
//char buf[100] = {};
//for (i = 0;i < num;i++)
//{
// for (int j = i; j < num; j++)
// {
// if (strcmp(p2[i], p2[j]) < 0)
// {
// strcpy(buf, p2[i]);
// strcpy(p2[i], p2[j]);
// strcpy(p2[j], buf);
// }
// }
//}
sortP(p, num);
//排序之后打印
//printf("\n");
//for (i = 0;i < num;i++)
//{
// printf("%s \n", p2[i]);
//}
myPrint(p, num);
//释放内存
//{
// for (i = 0;i < num;i++)
// {
// free(p2[i]);
// p2[i] = NULL;
// }
// free(p2);
// p2 = NULL;
//}
system("pause");
return 0;
}