0

所以我想要一个最初不知道大小的数组(从命令行从用户那里获取),但我想让它全局可访问(在 main 之外)。

所以这就是我所做的:

 //.h file declaration
 typedef struct res
 {
   int popultaion[NB_TYPE];
   int alive;
   int birthat[NB_TYPE];
 }res_t;

 //.c file
 res_t* res_first = NULL;

 int main(int argc, char* argv[])
 {
    int no_of_mutants = atoi(argv[1]);
    int i,j = 0;
    srand(time()NULL);
    res_t* tem= res_first;
    for(i = 0; i < no_of_mutants; i++)
    {      

       for(j = 0; i < NB_TYPE; i++)
       {             
         tem->popultaion[j] = rand();
       }
       tem++
    }
    //...other code
  }

我遇到了分段错误。,当我使用 gdb 进行调试时,它似乎在这里得到了 SIGSEGV。

      tem->popultaion[j] = rand();

我有两个问题:

  1. 这种尝试使用添加指针构造数组的形式是否有效?尽管地址在技术上应该是有效的,但我在第一次运行时遇到了段错误。
  2. 从结构访问数组成员的方式是否有效?(有点确定,但只是想确定一下)?

PS 我知道 malloc 并且可以使用 malloc 实现相同的目标,但我想知道这是否是给我带来问题的原因,然后再更改代码中的其他任何地方,如果是,为什么?

4

2 回答 2

3

这种尝试使用添加指针构造数组的形式是否有效?尽管地址在技术上应该是有效的,但我在第一次运行时遇到了段错误。

为什么要呢?它是NULL,因此您的代码会调用未定义的行为。您需要做的是在用户输入数组中的项目数时为其分配内存。

res_first = malloc(sizeof(*res_first) * NUM_OF_ELEMENTS);

当然,使用后释放它:

free(res_first);
于 2013-02-17T06:16:27.367 回答
1

您确实会遇到分段错误,因为您没有分配任何内存。你res_first甚至没有初始化,NULL所以它指向随机的东西。您需要调用malloc以在堆上分配所需大小的数组。也看看realloc你是否需要稍后重新分配。

于 2013-02-17T06:14:34.277 回答