#include <stdio.h>
#include <stdlib.h>
typedef struct st
{
unsigned char *pucBuffer;
unsigned int uiBufSize;
unsigned int uiVBufIdx;
} ST;
int main () {
ST data1[10];
ST *data2 = NULL;
unsigned char str[10];
str[0] = '\0';
for (int i = 0; i < 9; i++)
{
str[i] = 'a' + i;
}
// for (int j = 0; j < 10; j++)
// {
// printf("%c ", str[j]);
// }
memset(data1, 0, sizeof(data1));
// printf("sizeof data1 = %d\n", sizeof(data1)); // 数组头,大小为sizeof(ST) * 10 = 160
// if (data1[0].pucBuffer == NULL)
// {
// printf("here\n");
// }
// printf("uiBufSize = %d\n", data1[0].uiBufSize);
data2 = data1;
// printf("sizeof data2 = %d\n", sizeof(data2)); // 指针,大小为8
for (int i = 0; i < 10; i++)
{
data2[i].pucBuffer = (unsigned char *)malloc(10);
if (data2[i].pucBuffer == NULL)
{
printf("malloc failed: %d\n", i);
break;
}
// printf("%s\n", data2[i].pucBuffer);
data2[i].pucBuffer[0] = '\0';
memcpy(data2[i].pucBuffer, str, 10);
data2[i].uiBufSize = 10;
data2[i].uiVBufIdx = 100;
}
// printf("%p\n", data2[0]);
for (int i = 0; i < 5; i++)
{
if (data2[i].pucBuffer != NULL)
{
// for (int j = 0; j < 10; j++)
// {
// printf("%c ", data2[i].pucBuffer[j]);
// }
// printf("\n");
// free掉数据
free(data2[i].pucBuffer);
data2[i].pucBuffer = NULL;
memset(&data2[i], 0, sizeof(ST));
}
}
printf("%d\n", data2[0].uiBufSize);
/*========================================================================*/
for (int i = 0; i < 10; i++)
{
data2[i].pucBuffer = (unsigned char *)malloc(10);
if (data2[i].pucBuffer == NULL)
{
printf("malloc failed: %d\n", i);
break;
}
// printf("%s\n", data2[i].pucBuffer);
data2[i].pucBuffer[0] = '\0';
memcpy(data2[i].pucBuffer, str, 5);
data2[i].uiBufSize = 10;
data2[i].uiVBufIdx = 100;
}
for (int i = 0; i < 10; i++)
{
if (data2[i].pucBuffer != NULL)
{
for (int j = 0; j < 5; j++)
{
printf("%c ", data2[i].pucBuffer[j]);
}
printf("\n");
}
}
// if (data2[0].pucBuffer == NULL)
// {
// printf("已经被释放了!\n");
// }
// data2 = NULL; // data2是data1赋值的,data1不是动态申请的内存,因此不能使用free(data2).
// if (data2)
// {
// printf("data2 = %p\n", data2);
// }
// if (data1)
// {
// printf("data1 = %p\n", data1);
// }
return 0;
}