野指针问题,为什么这样不能释放

小_芳芳 2015-06-16 07:34:47
倒数第二行,将分配的内存的指针赋值为NULL,为什么会报错呢?不解,环境:vs2013+win8
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdio.h>
#include<string.h>

struct Ateacher
{
char name[64];
char *a_name;
int age;
//char title[128];
};


void printArray1(struct Ateacher *pArray, int num)
{
int i = 0;
for (i = 0; i < num; i++)
{
printf("\n%d ", pArray[i].age);
printf("%s ", pArray[i].name);
printf("%s ", pArray[i].a_name);
}
}

void sortArray1(struct Ateacher *pArray, int num)
{
int i = 0;
int j = 0;
//int temp = 0;
struct Ateacher temp;
for (i = 0; i < num; i++)
{
for (j = i + 1; j < num; j++)
{
if (pArray[i].age > pArray[j].age)
{
temp = pArray[i];
pArray[i] = pArray[j];
pArray[j] = temp;
}
}

}
}
struct Ateacher* createTArray(int count)
{
struct Ateacher* p = (struct Ateacher*)malloc(count * sizeof(struct Ateacher));
if (p == NULL)
{
return NULL;
}
for (int i = 0; i < count; i++)
{
memset(&p[i], 0, sizeof(struct Ateacher));
p[i].a_name = (char *)malloc(128 * sizeof(char));
memset(p[i].a_name, 0, sizeof(128 * sizeof(char)));
}
return p;

}

int freeTArray(struct Ateacher* myarray, int count)
{
struct Ateacher* p = NULL;
if (myarray == NULL)
{
return;
}

for (int i = 0; i < count; i++)
{
p = myarray[i].a_name;
if (p != NULL)
{
free(p);
p = NULL;
}
}

if (myarray != NULL)
{
free(myarray);

}


}

void main()
{
//struct Ateacher tArray[10];

struct Ateacher *tArray = createTArray(4);
for (int i = 0; i < 4; i++)
{
//int tmp = 0;
printf("请输入age:");
scanf("%d", &tArray[i].age);
printf("请输入名称:");
scanf("%s", &tArray[i].name);
printf("请输入别名:");
scanf("%s", tArray[i].a_name);
}
printf("排序前:\n");
printArray1(tArray, 4);
printf("排序后:\n");
sortArray1(tArray, 4);
printArray1(tArray, 4);

freeTArray(tArray, 4);
tArray->a_name = NULL;
tArray = NULL;//为什么把它赋值位NULL,就报错,我觉得没有问题
system("pause");
}
...全文
174 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cll_jj 2015-06-17
  • 打赏
  • 举报
回复
这个p的变量多余的吧,把char 转换为struct再释放,还不如直接释放  struct Ateacher* p = NULL;     if (myarray == NULL)     {         return;     }       for (int i = 0; i < count; i++)     {         p = myarray[i].a_name;         if (p != NULL)         {
xiaodeerdeer 2015-06-17
  • 打赏
  • 举报
回复
好像之前已经对结构体里的成员一个成员赋空了,已经释放了,在此释放好像就有问题吧,再此释放,对象不存在了啊
todo9351 2015-06-17
  • 打赏
  • 举报
回复
我也觉得上楼上的原因,不是 tArray NULL的问题
小_芳芳 2015-06-17
  • 打赏
  • 举报
回复
引用 1 楼 love1937 的回复:
line:112 tArray->a_name = NULL; // tArray已被释放,此处故障
对对对对对,已经释放了
帆满 2015-06-17
  • 打赏
  • 举报
回复
引用 1 楼 love1937 的回复:
line:112 tArray->a_name = NULL; // tArray已被释放,此处故障
++
ngo tong 2015-06-16
  • 打赏
  • 举报
回复
line:112 tArray->a_name = NULL; // tArray已被释放,此处故障

70,026

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧