结构体动态分配长度的问题
结构体
typedef struct
{
int a;
double *b;
}st
一个返回结构体函数
st fun(int len)
{
st s;
s.a=100;
s.b = new double[len];//这个len不固定,根据函数参数来
……
return s;
}
以上,sizeof(s)始终是8,函数调用无效,返回结果不是实际值,只是内存地址的数字
但是如果不用double *b,结构体里单纯只有int a,这个a是能正常返回的
请大家教教我,怎么分配动态结构体长度,或者说,我这个算法思路,怎么整改?
[解决办法]
st fun(int len)
{
st s;
s.a=100;
s.b = new double[len];//这个len不固定,根据函数参数来
……
return s;
}
?函数返回的只是局部变量.函数尾序后局部变量就无效了.
[解决办法]
结果是对的
double* 是个指针, 它就是地址, sizeof 的话就是 4, 不管它指向的内存有多大.
sizeof 是编译的时候就计算的, 不是运行的时候才计算.
[解决办法]
大致上可以参考以下的方法:
#include <stdlib.h>
#include <stdio.h>
typedef struct
{
int a;
double* b;
}item_t;
item_t* create(int len)
{
item_t* item = (item_t*)malloc(sizeof(item_t));
if(item == NULL) return NULL;
item->a = 100;
item->b = (double*)malloc(sizeof(double) * len);
if(item->b == NULL)
{
free(item);
return NULL;
}
return item;
}
void destory(item_t* item)
{
if(item == NULL) return;
free(item->b);
free(item);
}
int geta(item_t* item)
{
return item->a;
}
void seta(item_t* item, int a)
{
item->a = a;
}
int main(void)
{
item_t* item = create(100);
if(item == NULL) return -1;
seta(item, 0x6502);
printf("%04x\n", geta(item));
destory(item);
return 0;
}
struct st
{
int a;
double b[];
};
st *s = reinterpret<st *>(new char[sizeof(st) + sizeof(double) * n]);