Получение ошибки стека «*** обнаружено разрушение стека ***: - PullRequest
1 голос
/ 10 июля 2020

Я написал приложение для чтения и записи в запись pro c, но получаю сообщение об ошибке «*** обнаружено разрушение стека ***: завершено Прервано (дамп ядра)»

Любая идея, почему эта ошибка. Примечание: если я попробую обычный файл (см. Код), то ошибок не будет.

vivek@Taru-PC:~/Practice_Code/code_driver$ ./app
Enter 1: To write data into device.
Enter 2: To read data from device.
Enter 8: To Display Menu again.
Enter 9: To Exit.
Enter your choice: 1
Enter data to write: hello world

Enter your choice: 2
Content of device: hello world

Enter your choice: 9
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)

Также см. Код

#include<stdio.h>
#include<fcntl.h>
#include<unistd.h>
#include<string.h>

#define BUFF_SIZE 256


void display_menu(){
  printf("Enter 1: To write data into device.\n");
  printf("Enter 2: To read data from device.\n");
  printf("Enter 8: To Display Menu again.\n");
  printf("Enter 9: To Exit.\n");
}

int main(int argc, char *argv[]){

  int fd, choice=0;
  char buffer[BUFF_SIZE];

//  fd = open("/home/vivek/test_file.txt", O_RDWR|O_CREAT);
//  fd = open("/dev/my_char_dev", O_RDWR);
    fd = open("/proc/my_proc", O_RDWR);

    display_menu();

    while(choice!=9){

    printf("Enter your choice: ");
    scanf("%d", &choice);
    getchar(); //To read new line after the digit, without it, will face problem in fget.
    switch(choice){
        case 1: printf("Enter data to write: ");
                fgets(buffer, BUFF_SIZE, stdin);
                write(fd, buffer, strlen(buffer));
                printf("\n");
                break;
        case 2: read(fd, buffer, BUFF_SIZE);
                printf("Content of device: %s\n", buffer);
                break;
        case 8: display_menu();
                break;
        case 9:
                break;
        default: printf("Not supported.\n");
                break;

      }
   }
   close(fd);
   return 0;
}

Если я попробую обычный файл (test_file.txt ), то ошибки нет.

...