知表不言 发表于 2017-7-16 10:01:30

用realloc动态申请内存出现以下提示

也不是每次都出错看不出哪里有在申请的内存外存取数据啊{:10_291:}
还有随机的出现输入数字被改成0是什么原因
具体代码如下:
#include <stdio.h>
#include <stdlib.h>
//输入若干数字,从小到大排序

void quick_sort(int array[], int left, int right); //从小到大排序

int main(void)
{
        int i = 0;
        int num = 0;
        int count = 0;
        int *ptr;
        printf("Please input numbers(double '-1' to end):\n");
        do
        {
                scanf("%d", &num);
                ptr = (int *)realloc(ptr, count * sizeof(int));
                if(ptr == NULL)
                {
                        perror("realloc");
                        exit(-1);
                }
                ptr = num;
                count++;
        }while(ptr != -1 || num != -1);
        quick_sort(ptr, 0, count - 3);
        for(i = 0; i < count - 2; i++)
        {
                printf("%d ", ptr);
        }
        putchar('\n');
        free(ptr);
        return 0;
}

void quick_sort(int array[], int left, int right) //从小到大排序
{
        int temp, pivot;
        int i = left, j = right;
        pivot = array[(left + right) / 2];
        while(i <= j)
        {
                while(array < pivot)
                {
                        i++;
                }
                while(array > pivot)
                {
                        j--;
                }
                if(i <= j)
                {
                        temp = array;
                        array = array;
                        array = temp;
                        i++;
                        j--;
                }
        }
        if(left < j)
        {
                quick_sort(array, left, j);
        }
        if(i < right)
        {
                quick_sort(array, i, right);
        }
}

ba21 发表于 2017-7-16 12:56:37


#include <stdio.h>
#include <stdlib.h>
//输入若干数字,从小到大排序

void quick_sort(int array[], int left, int right); //从小到大排序

int main(void)
{
      int i = 0;
      int num = 0;
      int count = 1;
      int *ptr;

                ptr = (int *)malloc(sizeof(int));
      printf("Please input numbers(double '-1' to end):\n");
      do
      {
                scanf("%d", &num);
                ptr = (int *)realloc(ptr, count * sizeof(int));
                if(ptr == NULL)
                {
                        perror("realloc");
                        exit(-1);
                }
                ptr = num;
                count++;
      }while(ptr != -1 || num != -1);
      quick_sort(ptr, 0, count - 3);
      for(i = 0; i < count - 2; i++)
      {
                printf("%d ", ptr);
      }
      putchar('\n');
      free(ptr);
      return 0;
}

void quick_sort(int array[], int left, int right) //从小到大排序
{
      int temp, pivot;
      int i = left, j = right;
      pivot = array[(left + right) / 2];
      while(i <= j)
      {
                while(array < pivot)
                {
                        i++;
                }
                while(array > pivot)
                {
                        j--;
                }
                if(i <= j)
                {
                        temp = array;
                        array = array;
                        array = temp;
                        i++;
                        j--;
                }
      }
      if(left < j)
      {
                quick_sort(array, left, j);
      }
      if(i < right)
      {
                quick_sort(array, i, right);
      }
}

知表不言 发表于 2017-7-16 16:10:26

ba21 发表于 2017-7-16 12:56


&#128591;十分感谢,我已经懂了,realloc的参数除了NULL必须是由malloc、calloc或realloc函数返回的值才行。

ba21 发表于 2017-7-16 16:51:18

知表不言 发表于 2017-7-16 16:10
&#128591;十分感谢,我已经懂了,realloc的参数除了NULL必须是由malloc、calloc或realloc函数返回的值才 ...

给个最佳吧老板
页: [1]
查看完整版本: 用realloc动态申请内存出现以下提示