【发布时间】:2018-03-29 07:00:30
【问题描述】:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct type {
int a;
char b[10];
}MyType;
MyType* p;
void appenddata(MyType* p);
void cleanup(MyType* pointer);
void mycode() {
p = (MyType *)malloc(sizeof(MyType));
if(p != NULL)
{
p->a = 10;
strcpy(p->b, "sample");
printf("p->a - %d\n",p->a);
printf("p.b - %s\n",p->b);
}
appenddata(p);
/* set the values for p and do some stuff with it */
cleanup(p);
if(p != NULL)
{
printf("p->a - %d\n",p->a); << Why value I am getting is '0' here and
printf("p.b - %s\n",p->b); << No value is printed here
}
}
void appenddata(MyType* p)
{
if(p != NULL)
{
p->a = 10;
strcpy(p->b, "sample appenddata");
printf("p->a - %d\n",p->a);
printf("p.b - %s\n",p->b);
}
else
{
printf("p is null\n");
}
}
void cleanup(MyType* pointer) {
free(pointer);
pointer = NULL;
}
int main()
{
printf("Hello, World!\n");
mycode();
return 0;
}
输出:
Hello, World!
p->a - 10
p.b - sample
p->a - 10
p.b - sample appenddata
p->a - 0
p.b -
在上面的程序中为什么我得到'0'并且mycode函数中没有显示数据,它应该是'10'并且应该打印'sample',程序有什么问题?据我所知我们什么时候做清理然后我没有作为参考传递,所以它不应该影响结构的本地副本。 请澄清我的疑问
【问题讨论】:
-
您正在关注
p和#include <stdlib.h>。打开警告。 -
即使在解决了 Keine 指出的问题之后,
pointer = NULL;在cleanup中也毫无意义。所做的只是将一个局部指针变量设置为NULL;调用方提供的参数将保持不变(尽管它将持有一个现在悬空的无效指针值)。
标签: c pointers malloc structure