我有这段代码
struct PDATA{
int NTH;
int NPH;
double th_start;
double th_step;
double ph_start;
double ph_step;
};
typedef struct PDATA *PDATA_P;
struct PDATA PAT_DATA;
PDATA_P PAT_DATA_P;
PAT_DATA_P = (PDATA_P) malloc(sizeof(struct PDATA));
PAT_DATA_P=&PAT_DATA;
....
free(PAT_DATA_P);
当我释放指针时,我得到了这个错误:
*** glibc detected *** /home/pc-linux/Desktop/Projects/AM_v0.1/Debug/AM_v0.1: free(): invalid pointer: 0xbfffe03c ***
错误在哪里?
答案 0 :(得分:2)
您的错误在PAT_DATA_P = &PAT_DATA
PAT_DATA
在堆栈上分配。
也许你的意思是*PAT_DATA_P = PAT_DATA
复制成员,而不是分配指针?
答案 1 :(得分:0)
使用以下行将堆栈中分配的变量的地址分配给指针:
PAT_DATA_P=&PAT_DATA;
然后你试着释放它!
答案 2 :(得分:0)
始终初始化要创建的变量。这是一个很好的做法 PAT_DATA在任何时候都没有初始化,因此无法使用。