【问题标题】:Small Problems with Bubble Sort Method冒泡排序法的小问题
【发布时间】:2019-04-18 17:10:03
【问题描述】:

我的 Visual Studio 总是出现不同的异常。(Bubble sort.exe 已触发断点。) 有时在第 6 行 :(arr_2 = (int *)malloc(size); 有时在 free (arr) 和 free(arr_2) 的行上;

int bubble(int size, int * arr) {
for (int i = 0; i < size; i++) {
    printf("array[%d] = %d \n", i, arr[i]);
}
int * arr_2;
arr_2 = (int *)malloc(size);

for (int i = 0; i < size; i++) {
    arr_2[i] = arr[i];
}
for (int i = 0; i < size; i++) {
    printf("2array_2[%d] = %d \n", i, arr_2[i]);
}
int numb;
for (int i = 0; i < size; i++) {                                               
    if (arr[i] > arr[i + 1]) {
        numb = arr[i];
        arr[i] = arr[i + 1];
        arr[i + 1] = numb;
    }

}
free(arr_2);
return 0;
};
int main(){
char size[100];
printf("Hello! Please enter the size of the array that will be sorted with 
bubble sort method \n Maximum size is 100 \n");
gets_s(size);
int size_1 = atoi(size);
int * arr;
arr = (int *)malloc(size_1);
for (int i = 0; i < size_1; i++) {
    arr[i] = rand();
}
bubble(size_1, arr);


free(arr);
return 0;
}

【问题讨论】:

  • 欢迎来到 StackOverflow!请编辑您的标题以更好地描述您的问题。您还不需要列出语言(它被标签覆盖),也不需要全部大写。编辑代码以修复缩进也会对读者有所帮助。
  • 这要么是 c,要么是 c++ 努力看起来像 c。你为什么使用mallocfree
  • 我认为您需要阅读此ericlippert.com/2014/03/05/how-to-debug-small-programs 当您在其中放置断点时,malloc 的错误将很容易看到
  • 我觉得 C++ 不得不这么频繁地反对使用 c 的东西有点难过。我不知道任何 c,但我很确定它是一种几乎和 c++ 一样漂亮的语言,如果它是 c++,就没有正当理由在你的代码中使用 mallocfree
  • 如果您遇到malloc()free() 的问题,您没有 问题,您有大问题。对于入门级程序员(以及其他人)来说,存储管理是最可怕的事情之一。由于这是标记为 C++,为什么不std::vector?它让事情变得更容易(不需要malloc()/free() 也不需要new[]/delete[])。

标签: c malloc


【解决方案1】:

我们是这样的:

int bubble(int size, int * arr)
{
    int numb;
    for(int i = 0; i < size - 1; i++)
        for(int j = 0;j < size - i - 1; j++)
            if(arr[j] > arr[j + 1])
            {
                numb = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = numb;
            }

    return 0;
};


// using
int main()
{
    char size[100];
    printf("Hello! Please enter the size of the array that will be sorted with bubble sort method \n Maximum size is 100 \n");
    gets_s(size);
    int size_1 = atoi(size);

    int * arr = new int[size_1];

    for(int i = 0; i < size_1; i++)
        arr[i] = rand();
    bubble(size_1, arr);
    delete []arr;
}

您不需要输入数组的副本。

【讨论】:

    【解决方案2】:

    当您使用 malloc 保留内存时,您应该转换为以字节为单位的大小。 使用 malloc(number_of_elements * sizeof(element))。

    int size_1 = atoi(size);
    int * arr;
    arr = (int *)malloc(size_1 * sizeof( int ) );
    for (int i = 0; i < size_1; i++) {
        arr[i] = rand();
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      相关资源
      最近更新 更多