Code chạy trên Codeblocks không lỗi nhưng chạy trên Visual Studio thì bị lỗi
Chào mọi người, em là newbie, có cái thắc mắc bữa giờ chịu không nổi, hỏi ông thầy thì ổng nói cái này còn lâu lắm mới học nên không trả lời
em có viết đoạn code như sau trên code block:
// chuong trinh duoc viet de sap xep 3 so nguyen a, b, c cho truoc theo thu tu tang dan; co the nang cap len cho n so bat ky.
#include <stdio.h>
#define size 3 // co the khai bao lon hon 3
void input_array(int arr[], int n); // ham nhap vao mot mang n so
void output_array(int arr[], int n); // ham xuat ra mot mang n so
void sort(int arr[], int n); // ham sap xep mang theo thu tu tang dan
int main()
{
int arr[size];
input_array(arr, size);
sort(arr, size);
output_array(arr, size);
return 0;
}
void input_array(int arr[], int n)
{
for (int i = 1; i <= n; i++) {
printf("nhap so thu %d: ", i);
scanf("%d", &arr[i]);
}
}
void output_array(int arr[], int n)
{
for (int i = 1; i <= n; i++) {
printf("%d ", arr[i]);
}
}
void sort(int arr[], int n)
{
int val_trunggian; // khai bao 1 bien trung gian de sap xep
for (int i = 1; i <= n - 1; i++) {
for(int j = i + 1; j <= n; j++) {
if (arr[i] > arr[j]) {
val_trunggian = arr[i];
arr[i] = arr[j];
arr[j] = val_trunggian;
}
}
}
}
khi chạy trên code block thì buid run ngon lành nhưng khi chạy trên Visual 2013 (hàng face dùng key) thì lúc build nó vẫn ok không báo lỗi nhưng khi chạy chương trình thì lại báo là "Run-Time Check Failure #2 - Stack around the variable ‘arr’ was corrupted."
tự dưng nó báo biến arr của em corrupted chắc bị hư hỏng gì đó mong mọi người hướng dẫn lỗi này, em cám ơn!
Lỗi do bạn sử dụng mảng
arr
vượt quá kích thước thật của nó.Ở ngôn ngữ C, chỉ số mảng bắt đầu từ
0
không phải1
.Bạn hãy sửa lại:
i = 0, i < n
.Compiler của Visual Studio khác với code blocks?
Đúng
Ngoài ra còn có rất nhiều compiler khác nhau, và đây là một vài trong số chúng:
http://en.cppreference.com/w/cpp/compiler_support
cho mình hỏi thêm về một bài tập nhỏ này nữa, chương trình yêu cầu nhập vào 1 chữ cái nếu là chữ hoa thì xuất ra chữ thường và ngược lại, tuy chương trình đơn giản nhưng khai báo hàm như sau:
khi mình chạy trên codeblock thì ok, chạy trên visual 2010 vẫn ok, chạy trên visual 2013 máy thằng bạn cũng ok, nhưng khi chạy máy của mình thì nó warning Warning C4715: ‘Checked_char’ : not all control paths return a value!
máy mình cũng cài visual 2013 frame work 4.5.1, có phải lỗi do phần mềm hay là do mình sai cú pháp chỗ nào? cám ơn đã đọc bài