Unhandled exception

-6

I wrote a program in visual studio 2013 during compile I got this error: ((Unhandled exception at 0x5837FB53 (msvcr120d.dll) in ConsoleApplication2.exe: 0xC0000005: Access violation reading location 0x0000006D.))

what should i do?

here is my code:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int jabs(int th)
{
    if (th < 0); {
        th *= -1;
    }

    return th;
}

int main()
{
    char depature[8][8] = { "08:00 am" ,"09:43 am","11:19 am","12:47 am", "02:00pm" ,"03:45 pm","07:00 pm","09:45 pm" };
    char arrival[8][8] = { "10:16 am", "11:52 am", "01:31 pm", "03:00 pm", "04:08 pm", "05:55 pm", "09:20 pm", "11:58 pm" };
    int dep[8] = { 800,943,1119,1247,1400,1545,1900,2145};
    int str1[2];
    int str2[2];
    char str3[10];
    int temp;
    int index;
    int a[10];

    int i;
    int j=0;
    int javab = 0;
    int javabs;
    printf("enter a time corresponding 24 hour");
    scanf("%s", &str3);
    for (i = 0; i <= 4; i++)
    {
        if (str3[i] != ':'){
            str1[i] = str3[i] - '0';

        }
        else 
        {
            i++;
            str2[j] = str3[i]-'0';
            i++;
            str2[j+1] = str3[i] - '0';
            break;
        }


    }
    str1[0] = str1[0] * 1000;
    str1[1] = str1[1] * 100;
    str2[0] = str2[0] * 10;
    javab = str1[0] + str1[1] + str2[0] + str2[1];
    for (j = 0; j < 8; j++)
        javabs = (javab - dep[j]);
        a[j] = jabs(javabs);
    temp = a[0];
    for (j = 1; j < 8; j++)
    {

        if (temp > a[j])
        {
            temp = a[j];
        }
    }   
    for (j = 0; j < 8; j++)
    {
        if (temp == a[j])
        {
            index = j;
            break;
        }

    }
    printf("closest departure time is %s,arriva at %s \n",depature[j][7],arrival[j][7]);
    return 0;

}`enter code here`
c
compilation
asked on Stack Overflow Oct 16, 2015 by Mohsen

2 Answers

0
char depature[8][8] = { "08:00 am" ,"09:43 am","11:19 am","12:47 am", "02:00pm" ,"03:45 pm","07:00 pm","09:45 pm" };
char arrival[8][8] = { "10:16 am", "11:52 am", "01:31 pm", "03:00 pm", "04:08 pm", "05:55 pm", "09:20 pm", "11:58 pm" };

Leave a space for '\0' as you may want to print them using %s. Size of both should be -

char departure[8][9]= // initialization 
char arrival[8][9]=  // initialization

Also this -

 scanf("%s", &str3);   
             ^ & is not needed ,remove &

simply write -

scanf("%9s",str3);
answered on Stack Overflow Oct 16, 2015 by ameyCU • edited Oct 16, 2015 by ameyCU
0

depature[j][7] and arrival[j][7] are invalid as pointer, so you mustn't pass them to %s in printf.

the line

printf("closest departure time is %s,arriva at %s \n",depature[j][7],arrival[j][7]);

should be

printf("closest departure time is %s,arriva at %s \n",depature[j],arrival[j]);

This will free you from getting Segmentation fault.

Note that there are more warnings:

prog.c: In function 'jabs':
prog.c:6:16: warning: suggest braces around empty body in an 'if' statement [-Wempty-body]
     if (th < 0); {
                ^
prog.c: In function 'main':
prog.c:30:5: warning: format '%s' expects argument of type 'char *', but argument 2 has type 'char (*)[10]' [-Wformat=]
     scanf("%s", &str3);
     ^
prog.c:22:9: warning: variable 'index' set but not used [-Wunused-but-set-variable]
     int index;
answered on Stack Overflow Oct 16, 2015 by MikeCAT

User contributions licensed under CC BY-SA 3.0