所以我希望有一个最初不知道大小的数组(从命令行中取自用户),但我想让它可以全局访问(在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();
我有两个问题:
P.S。我知道malloc并且可以使用malloc实现相同的功能,但是我想知道这是在给代码中的其他地方改变之前是什么问题,如果是这样的原因?
答案 0 :(得分:3)
这种尝试使用添加指针有效构建数组的形式吗?我在第一次运行时遇到段错误,但地址在技术上应该有效。
为什么要这样?它是NULL
,因此您的代码会调用未定义的行为。当用户输入数组中的项目数时,您需要为其分配内存。
res_first = malloc(sizeof(*res_first) * NUM_OF_ELEMENTS);
当然,使用后将其释放:
free(res_first);
答案 1 :(得分:1)
由于您没有分配任何内存,因此会出现分段错误。您的res_first
甚至没有使用NULL
初始化,因此它指向随机的内容。您需要调用malloc
以在堆上分配具有所需大小的数组。如果您需要稍后重新分配,请查看realloc
。