核心转储的行为。是定义还是未定义的行为?

时间:2014-05-07 13:48:05

标签: c++ coredump

在下面的代码中,我通过给缓冲区大小设置了一个错误。

char request[10];

从文件中读取时,我使用fscanf和文件中的行是“THIS_IS_THE_TEST_CODE”。这里的行长度大于缓冲区的大小。

但下面是我的代码在没有核心转储的情况下成功执行的一些情况,即使缓冲区大小很小。

情景1:

我评论了这一行

class_test *c = class_test :: getinstance();

那时代码执行成功而没有转储。

Scneario 2: 找到错误后,我增加了缓冲区大小,它适用于所有情况。

但pofack核心显示在feof

 fefabfe0 feof     (1, ffbff9c4, ffbff9cc, 212e4, ff390100, 0)
 00010940 _start   (0, 0, 0, 0, 0, 0) + 5c

为什么这样的代码行为?

环境:UNIX SOLARIS

 class class_test
     {
        public:

           static class_test* getinstance()
           {
              static class_test single_obj;
              return &single_obj;
           }

     };


     #include<iostream>

         int main()
         {
            using namespace std;
            class_test *c = class_test :: getinstance();

            FILE  *fptr;
            char request[10];

            if((fptr  = fopen("inputstat.txt","r")) == NULL)
            {
               printf("Couldn't Open..");
            }
            else
            {

           while(!feof(fptr))
           {
              memset(request,'\0',sizeof(request));
              fscanf(fptr,"%s",request);

           }
        }
        return 0;
     }

0 个答案:

没有答案