Tại sao mảng cấp phát 10 phần tử nhưng vẫn in được nhiều hơn?

Ai giải thích giúp mình với tại sao mảng gắn như kia mà vẫn chạy với nữa là cấp phát mảng có 10 phần tử mà nó vẫn in đủ xâu là sao

#include <stdio.h>
#include <conio.h>
#include <string.h>
int main()
{
   int i,m[5];
   char x1[10],x2[10];
   char *s1,*s2;
   for (i=1; i<7;i++) i[m] =i*2;
   for (i=1;i<7;i++) printf("\n m[%d] = %d",i,m[i]);
   
   s1= new char[10];
   s2= new char[10];
   
   strcpy(s2," xau 2");
   strcpy(s1,"Dai hoc bach khoa ha noi");
   printf("\n s1= %s",s1);
   printf("\n s2= %s",s2);
   
   strcpy(x2," xau x2");
   strcpy(x1,"Dai hoc bach khoa ha noi");
   printf("\n x1= %s",x1);
   printf("\n x2= %s",x2);

   getch();
}

Thì xin 10 mà làm quá lên cũng vẫn được, đến lúc chẳng may bị thằng khác nó đánh lại phải đi xin lỗi :joy: Thôi cứ xin đủ cho chắc.

1 Like

đấy là trong th vẫn đủ ô nhớ ấy gì bạn

Nếu như ô nhớ ấy chưa bị chương trình nào đặt cọc thì xài được. Nhưng nguy cơ đang xài lại bị thằng khác xài vào thì vẫn còn.

1 Like

Do trình biên dịch lởm và code lởm chứ sao nữa :))

1 Like

ok thankiu bạn. bạn biết tại sao chỗ kia i[m] mà nó vẫn đúng k

đây là bài tập mấy bạn cố tính cho code lởm hic

Bộ nhớ đó phải được trình biên dịch nó cấp cho thì mới xài được, ở trên là trình biên dịch nó cố tình cấp cho bạn thêm bộ nhớ rồi.

Như build trên GCC nó sẽ báo warning ngay:

prog.cc: In function 'int main()':
prog.cc:21:10: warning: 'void* __builtin_memcpy(void*, const void*, long unsigned int)' writing 25 bytes into a region of size 10 overflows the destination [-Wstringop-overflow=]
   21 |    strcpy(x1,"Dai hoc bach khoa ha noi");
      |    ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~prog.cc: In function 'int main()':
prog.cc:21:10: warning: 'void* __builtin_memcpy(void*, const void*, long unsigned int)' writing 25 bytes into a region of size 10 overflows the destination [-Wstringop-overflow=]
   21 |    strcpy(x1,"Dai hoc bach khoa ha noi");
      |    ~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?