30/09/2018, 18:37

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!

Pham Van Hai viết 20:46 ngày 30/09/2018

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ải 1.
Bạn hãy sửa lại:
i = 0, i < n.

Compiler của Visual Studio khác với code blocks?
Đúng

  • Code blocks dùng gcc, trình biên dịch mã nguồn mở.
  • Visual Studio dùng trình biên dịch của hãng Microsoft.

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

kiencon viết 20:39 ngày 30/09/2018

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:

#include <stdio.h>
#include <stdlib.h>
#define true 1
#define false 0

bool Checked_char(char c); // ham kiem tra chu cai duoc nhap vao, neu la chu cai in hoa tra ve 0, chu cai thuong tra ve 1
int up_down(char c); // ham tra ve ky tu in hoa neu nhap ky tu thuong va nguoc lai

int main()
{
	char c;
	printf("nhap mot chu cai: ");
	scanf_s("%c", &c);
	c = up_down(c);
	system("pause");
	printf("%c", c);
	return 0;
}

bool Checked_char(char c)
{
	if (c >= 'A' && c <= 'Z')
		return false;
	if (c >= 'a' && c <= 'z')
		return true;
}

int up_down(char c)
{
	if (Checked_char(c))  return c -= 32;
	else return c += 32;
}

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

Bài liên quan
0