定义结构体内的指针变量,欲对其进行赋值时报错。
原代码如下:
typedef struct Stack
{
int* base;
int* top;
int size;
}Stack;
void init(Stack* X)
{
X->base=NULL;
X->top=X->base;
X->size=6;
}
void push(Stack* X,int n)
{
*(X->base)=n; // 欲对结构体内指针变量进行赋值操作
X->top++;
cout<<n;
}
int main()
{
Stack* A=(Stack*)malloc(sizeof(Stack));
Stack* B=(Stack*)malloc(sizeof(Stack));
Stack* S=(Stack*)malloc(sizeof(Stack));
init(A);
init(B);
init(S);
push(A,5); // 欲对结构体内指针变量进行赋值操作
return 0;
}
dev调试出现断点陷阱:
报错原因:
在struct中只是定义了指针变量,但未分配空间的情况下就对其进行赋值
解决办法:
在初始化时对结构体内的指针变量分配空间内存,再对其赋值
修改后代码如下:
typedef struct Stack
{
int* base;
int* top;
int size;
}Stack;
void init(Stack* X)
{
X->base=NULL;
X->base=(int*)malloc(sizeof(int)); // 分配内存
X->top=(int*)malloc(sizeof(int)); // 分配内存
X->top=X->base;
X->size=6;
}
void push(Stack* X,int n)
{
*(X->base)=n; // 欲对结构体内指针变量进行赋值操作
X->top++;
cout<<n;
}
int main()
{
Stack* A=(Stack*)malloc(sizeof(Stack));
Stack* B=(Stack*)malloc(sizeof(Stack));
Stack* S=(Stack*)malloc(sizeof(Stack));
init(A);
init(B);
init(S);
push(A,5); // 欲对结构体内指针变量进行赋值操作
return 0;
}