问问题
107 次
4 回答
0
我猜你正在返回一个本地(结构)变量的地址,当你稍后尝试使用它时,会给你一个分段错误(试图访问一个无效的地址)。
您可以在函数中动态分配结构并返回它。
struct IntArray* erzeugeArr(int length)
{
struct IntArray *erzeugt=(struct IntArray*)malloc(sizeof(struct IntArray*));
erzeugt->array = (int*) malloc(sizeof (int)*length);
return erzeugt;
}
int main()
{
struct IntArray *str;
str=erzeugeArr(10);
//use str for processing
}
于 2013-05-25T15:42:32.053 回答
0
该string = &(erzeugeArr(5));
语句尝试获取表达式的地址(函数返回类型为 的表达式struct IntArray
。)只有对象有地址,表达式没有。
于 2013-05-25T15:47:30.393 回答
0
你可以这样做:
struct IntArray
{
int length;
int *array;
}
struct IntArray *alloc_arr(int length)
{
struct IntArray *erzeugt = calloc(sizeof(struct IntArray));
erzeugt->length = length;
erzeugt->array = calloc(length * sizeof(int));
return erzeugt;
}
void free_arr(struct IntArray *p)
{
free(p->array);
free(p);
}
或者,您也可以做一些偷偷摸摸的事情,以足够大的大小分配结构以包含内联的 int 数组:
struct IntArray
{
int length;
int array[1];
}
struct IntArray *alloc_arr(int length)
{
struct IntArray *erzeugt = calloc(sizeof(struct IntArray) + (length-1) * sizeof(int));
erzeugt->length = length;
return erzeugt;
}
void free_arr(struct IntArray *p)
{
free(p);
}
于 2013-05-25T15:47:30.563 回答
0
&(erzeugeArr(5)) 很尴尬。它似乎返回了函数的地址。但是由于 lvalue required 错误,C 编译器会失败。
而是尝试以下方法:-
struct IntArray *string,s1;
s1=erzeugeArr(5);
string = (struct IntArray *) &s1; // If you really require pointer access
于 2013-05-25T15:53:46.087 回答