主要甚至运行之前的段故障?

时间:2015-10-28 03:14:11

标签: c segmentation-fault main

我的主要甚至运行能够导致seg故障的重要代码之前我收到了分段错误。即,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);

2 个答案:

答案 0 :(得分:2)

如果要立即查看输出,则需要刷新句柄(使用fflush(stdio))。您的程序很可能在它立即发出的printf电话后崩溃。

IO也会在行尾刷新,所以如果你的调试语句在'\n'结束,那么它将会显示,你会发现你的分段错误发生的地方。

答案 1 :(得分:2)

在图像中可以看到未分配内存到struct。

将内存分配给结构指针firstnew,然后使用它们来访问结构成员。

person *first=malloc(sizeof *first);             //remember to free allocated memory