【问题标题】:Assigning array of struct fails分配结构数组失败
【发布时间】:2018-11-05 13:28:53
【问题描述】:

这个简单的代码崩溃(分段错误),我不明白为什么。似乎这个 [] 操作不适用于结构数组。也许有人知道这种奇怪行为背后的原因。

#include <stdio.h>
#include <stdlib.h> 
#include <string.h>

#define SIZE 3

typedef struct{
  int a;
  char * b;
}qwe;

void foo ( qwe **out){
  int i;

  *out = (qwe*)malloc(SIZE*sizeof(qwe));

  for (i=0;i<SIZE;i++){
    out[i]->a = i;
    out[i]->b = strdup("Hello");
  }
}

int main() {
  int i = 0;
  qwe *p = NULL;

  foo(&p);

  for (i=0;i<SIZE;i++)      
    printf("Int: %d, str: %s \n",p[i].a , p[i].b);

}

【问题讨论】:

    标签: arrays struct malloc


    【解决方案1】:

    通过声明qwe *p = NULL;,您不是在声明指针数组,而是在声明实际的struct。 但是在foo 中,您将数组内容取消引用为指针,这是不正确的。 您的方法可以这样重写:

    for (int i = 0; i<SIZE; i++) {
        (*out)[i].a = i;
        (*out)[i].b = _strdup("Hello");
    }
    

    另一种使解引用更易读的方法(在我看来)是传递对数组的引用:

    void foo1(qwe *& out) {
        out = (qwe*)malloc(SIZE * sizeof(qwe));
        for (int i = 0; i<SIZE; i++) {
            out[i].a = i;
            out[i].b = _strdup("Hello");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-26
      • 1970-01-01
      • 2013-03-15
      • 2017-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-10
      相关资源
      最近更新 更多