为什么说没有初始化指针?
#include <stdio.h>#include <malloc.h>
#include <string.h>
typedef struct _Info1
{
int value;
char name[64];
}Info1,*pInfo1;
typedef struct _Info2
{
int value;
char *name;
}Info2,*pInfo2;
typedef struct _Info3
{
int value;
size_t length; //通过length来控制name的长度
char name[1];
}Info3,*pInfo3;
int main()
{
Info1 *pi1 = (Info1 *)malloc(sizeof(Info1));
if (pi1 == NULL)
{
goto err;
}
memset(pi1, 0,sizeof(Info1));
strcpy_s(pi1->name, 64, "lucy");
pi1->value = 78;
Info2 *pi2 = (Info2 *)malloc(sizeof(Info2));
if (pi2 == NULL)
{
goto err;
}
memset(pi2, 0, sizeof(Info2));
size_t len = sizeof("lucy") + 1;
pi2->value = 78;
pi2->name = (char *)malloc(len);
if (pi2->name == NULL)
{
goto err;
}
memset(pi2->name, 0, len);
strcpy_s(pi2->name, len, "lucy");
Info3 *pi3 = (Info3 *)malloc(sizeof(Info3)+strlen("lucy")+1-1);
if (pi3 == NULL)
{
goto err;
}
memset(pi3, 0, sizeof(Info3) + strlen("lucy") + 1 - 1);
pi3->value = 78;
pi3->length = strlen("lucy") + 1;
strcpy_s(pi3->name, pi3->length, "lucy");
printf("1:score:%d ,name:%s\n", pi1->value, pi1->name);
printf("2:score:%d ,name:%s\n", pi2->value, pi2->name);
printf("3:score:%d ,name:%s\n", pi3->value, pi3->name);
err:
if (pi1)
free(pi1);
if (pi2)
free(pi2);
if (pi2->name)
free(pi2->name);
if (pi3)
free(pi3);
return 0;
}
错误提示说pi2和pi3没有初始化。
请问是什么原因。
回答:
可能是编译器不认goto
回答:
如果pi1分配内存失败pi2, pi3是什么?是已经定义了还是没有?已经定义了的话值是多少?没有定义那你怎么可以动一个未定义变量?
以上是 为什么说没有初始化指针? 的全部内容, 来源链接: utcz.com/p/195464.html