Proffs
@Proffs
Недопрограммист

Segmentation Fault не доходя до main?

Недавно писал код и решил скомпилировать. Не то чтобы очень хорошо знаю C, изучаю делая проекты.

Когда я скомпилировал его выдало кучу предупреждений
Предупреждения

window.h:8:1: warning: useless storage class specifier in empty declaration
};
^
In file included from window.c:10:0:
window.h:8:1: warning: useless storage class specifier in empty declaration
};
^
window.c: In function ‘initwin’:
window.c:47:13: warning: ‘sizeof’ on array function parameter ‘display’ will return size of ‘int *’ [-Wsizeof-array-argument]
if (sizeof(display) / sizeof(display[0]) == 1){
^
window.c:45:49: note: declared here
void initwin(struct win *Win, int x, int y, int display[]){
^~~~~~~
window.c:52:25: warning: ‘sizeof’ on array function parameter ‘display’ will return size of ‘int *’ [-Wsizeof-array-argument]
int id = rand()%sizeof(display) / sizeof(display[0]) * 5;
^
window.c:45:49: note: declared here
void initwin(struct win *Win, int x, int y, int display[]){
^~~~~~~
window.c:53:29: warning: ‘sizeof’ on array function parameter ‘display’ will return size of ‘int *’ [-Wsizeof-array-argument]
for (int proc; proc ^
window.c:45:49: note: declared here
void initwin(struct win *Win, int x, int y, int display[]){


spoiler

#include <stdio.h>
#include <stdlib.h>
#include <linux/fb.h>
#include <fcntl.h> 
#include <sys/ioctl.h>
#include <sys/mman.h>

#include <inttypes.h>
#include "util.h"
#include "window.h"

//id of windows
int default_display[] = {1};



//vars
struct fb_fix_screeninfo finfo;
struct fb_var_screeninfo vinfo;

/*declarations of functions*/
//read_fb open /dev/fb0 or other device to read & write.
int read_fb(char *device);

void initwin(struct win *Win, int x, int y, int display[]);


//function for managing windows on struct {display}

int main(){
	printf("here1");
	int fd = read_fb("");
	ioctl(fd, FBIOGET_VSCREENINFO, &vinfo);
	ioctl(fd, FBIOGET_FSCREENINFO, &finfo);
	size_t size = vinfo.yres * finfo.line_length;
	uint8_t *fbp = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd,0);
	struct win **window;
	printf("here");
	initwin(*window, 100, 100, default_display);
	return 0;	
	//printf("%ls", window);
}

//managing windows
void initwin(struct win *Win, int x, int y, int display[]){
	while (1){
		if (sizeof(display) / sizeof(display[0]) == 1){
			printf("here");
			int id = 2;
			break;
		}
		int id = rand()%sizeof(display) / sizeof(display[0]) * 5;
		for (int proc; proc<sizeof(display) / sizeof(display[0]); proc++) {
			if (proc == id){
				break;
			}
		}
		printf("here id");
		Win->id = id;
		Win->x = 100;
		Win->y = 100;
		break;
	}

}


код main.h

typedef struct win {
	char *name;
	int id;
	int x;
	int y;
};


В чем проблема?
  • Вопрос задан
  • 93 просмотра
Решения вопроса 1
@galaxy
Варнинги правильные. Прочитайте, что написано и исправляйте.

Segmentation Fault не доходя до main?

Не думаю, что не доходя до main. Скорее просто прога падает, не успевая зафлашить буфер stdout (добавьте \n к строкам, после этого должно выводить сразу).

struct win **window;
  printf("here");
  initwin(*window, 100, 100, default_display);

Кто выделяет память под window?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
CityCat4
@CityCat4 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
gdb в зубы и вперед
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы