0
4

4 回答 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 回答