主事件运行前出现段错误?
Seg fault before main even runs?
在我的 main 甚至运行任何能够导致段错误的重要代码之前,我就收到了一个段错误。即,printf("before main functionality starts\n");
不是 运行。
可能是什么导致了这个问题?
int main() {
printf("before main functionality starts\n");
person* people = create();
//Make new file and write into it
printf("\nWriting into file\n");
char file_name[] = "people_list";
int file_number = open(file_name, O_CREAT|O_WRONLY, 0644); //only owner can read/write, rest can only read
int error_check;
error_check = write(file_number, people, sizeof(&people) ); //reads array into file
if(error_check < 0) {
printf("ERROR: %s\n", strerror(errno));
return -1;
}
close(file_number);
//Read from new file
printf("\nReading from file...\n");
person* new_people[10];
file_number = open(file_name, O_RDONLY); //reopens file, now with data
error_check = read(file_number, new_people, sizeof(people));
if(error_check < 0) {
printf("ERROR: %s\n", strerror(errno));
return -1;
}
close(file_number);
如果您想立即看到输出,则需要刷新句柄(使用 fflush(stdio)
)。您的程序很可能在立即发出 printf
调用后崩溃。
IO 也会在行尾刷新,因此如果您的调试语句以 '\n'
结尾,那么它将被显示,您会发现您的分段错误发生的位置。
在图像中可以看到您未分配 内存来构造 .
为结构指针first
和new
分配内存,然后使用它们访问结构成员。
person *first=malloc(sizeof *first); //remember to free allocated memory
在我的 main 甚至运行任何能够导致段错误的重要代码之前,我就收到了一个段错误。即,printf("before main functionality starts\n");
不是 运行。
可能是什么导致了这个问题?
int main() {
printf("before main functionality starts\n");
person* people = create();
//Make new file and write into it
printf("\nWriting into file\n");
char file_name[] = "people_list";
int file_number = open(file_name, O_CREAT|O_WRONLY, 0644); //only owner can read/write, rest can only read
int error_check;
error_check = write(file_number, people, sizeof(&people) ); //reads array into file
if(error_check < 0) {
printf("ERROR: %s\n", strerror(errno));
return -1;
}
close(file_number);
//Read from new file
printf("\nReading from file...\n");
person* new_people[10];
file_number = open(file_name, O_RDONLY); //reopens file, now with data
error_check = read(file_number, new_people, sizeof(people));
if(error_check < 0) {
printf("ERROR: %s\n", strerror(errno));
return -1;
}
close(file_number);
如果您想立即看到输出,则需要刷新句柄(使用 fflush(stdio)
)。您的程序很可能在立即发出 printf
调用后崩溃。
IO 也会在行尾刷新,因此如果您的调试语句以 '\n'
结尾,那么它将被显示,您会发现您的分段错误发生的位置。
在图像中可以看到您未分配 内存来构造 .
为结构指针first
和new
分配内存,然后使用它们访问结构成员。
person *first=malloc(sizeof *first); //remember to free allocated memory