我正在编写一个程序,它应该构建一个SDL_Rects数组。在for循环中,我将值分配给SDL_Rect的字段,并在每个以这种方式创建的矩形中指向一个指针数组。 这是我的代码:
SDL_Rect *rectangles[n];
for (i = 0; i <= n - 1; i++)
{
SDL_Rect *rect = NULL;
rect->w = random_int(min_size, max_size);
rect->h = random_int(min_size, max_size);
rectangles[i] = rect;
}
n,min_size和max_size都是从stdin读入的,这是random_int方法:
int random_int(int min, int max)
{
return min + rand() % (max + 1 - min);
}
每次我尝试运行我的代码时,都会在for循环中抛出“Segmentation Fault:11”。 那是为什么?
答案 0 :(得分:1)
在rect
中分配内存,否则它是未定义的行为。您基本上取消引用导致UB的NULL
值。
SDL_Rect *rect;
rect = malloc(sizeof(SDL_Rect));
if( rect == NULL){
fprintf(stderr,"%s","Error in malloc");
exit(1);
}
..
..
free(rect);