01/10/2018, 09:17
Trao đổi mảng 1 chiều
minh debug không có lỗi, khi chạy nó bị break ai giúp với.
![](/pictures/picfullsizes/2018/10/02/gzf1538414808.png)
Bài liên quan
minh debug không có lỗi, khi chạy nó bị break ai giúp với.
Hi Thich Choi.
i=n (n là kích thước mảng a ?) Lỗi chố đó.
đúng rồi bạn…
Cho mình hỏi là cái điều kiện cho vòng lặp for tại sao lại là i = vt + 1, mình nghĩ nó sẽ lỗi chỗ này chứ?
Hi Lam Nguyen.
Trong C/C++ thì 0 là false và còn lại.
Nghĩa là if(10) <=> if(true). Có vẻ không vấn đề gì nhưng khi đó phép gán cũng đưa được vào điều kiện if(a=10) <=> if(true) và if(a=0) <=> if(false).
Trong vòng for bạn viết for(int i = n; i = vt +1; i–); biên dịch và chạy không lỗi gì cả nếu vt + 1 không bao giờ = 0 thì nó không dừng lại thôi. (Đó có thể là lỗi nhưng có thể phục vụ cho logic riêng của bạn).
Theo mô tả lỗi “minh debug không có lỗi, khi chạy nó bị break ai giúp với.” thì thường là lỗi truy nhập vùng nhớ không được phép do khi chạy debug thì các biến thường được cấp phát riêng rẽ và khởi tạo mặc định. VD int a[10]; thì a[10] vẫn truy xuất như bình thường (không có biến nào ngay sau nó) a[100] thì có thể lỗi. Tuy nhiên khi chạy release thì các trình biên dịch tối ưu code nên a[10] ngay lập tức chết. Và các biến không khởi tạo mậc định nữa cũng là nguyên nhân.
Cảm ơn mình đã hiểu, như vậy thì vòng lặp sẽ lặp vô hạn nếu vt nhập vào khác -1.
do mình không khai báo mảng int a[ ], int n, còn cái vt+1 la điều kiện nếu để vt+1 vẫn chạy được nhưng nó sẽ trùng giá trị ở 2 phần tử trong mảng liên tiếp
vd: mình thêm ở vt 2 nó xuất mảng sẽ lỗi, giá trị vị trí 3 và 4 trùng nhau
chỉ biết vậy thui còn nguyên nhân mình không rõ
ai biết lỗi này là gì không chỉ cách sửa nó với
Hi Thich Choi.
Chac van loi dia chi thoi.
bài trước mình sửa lỗi rồi bài này khác, với lỗi mình thấy lần đầu
Bạn tinh ý thật đấy, hóa ra là dấu gán.
ai giúp mình với cái này mình debug nhiều lần rồi mà vẫn ko hiểu được
#include<stdio.h>
#include<conio.h>
void main()
{
int a[10][10];
int b[100];
int i,j,m,n;
printf(“Nhap do lon cua mang 2 chieu:”);
printf("\nm = “);scanf(”%d", &m);
printf(“n = “);scanf(”%d”, &n);
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
{
printf(“Nhap a[%d][%d]:”, i,j);
scanf("%d",&a[i][j]);
}
for (i=1;i<=m;i++)
for (j=1;j<=n;j++)
b[(i-1)n+j]=a[i][j]; //cái dòng này mình không hiểu tại sao lại như vậy và giá trị mới lại chèn ở
//giữa các giá giá trị rỗng chứ không phải mảng mới
printf("\nMang sau khi chuyen thanh 1 chieu la:\n");
for (i=1;i<=mn;i++) printf(" %d", b[i]);
getch();
}
thì bạn xét bản chất của mảng 2 chiều là biết mà , xem mảng 2 chiều duyệt theo chiều nào , nếu ngang thì sẽ ghi kế tiếp , còn dọc thì lưu ngắt quãng