分割错误,位于int的边界范围内

时间:2018-09-26 20:20:01

标签: c malloc

创建一个函数ft_range,该函数返回一个int数组。此int数组应包含min和max之间的所有值。 包含最小值-排除最大值。

#include <printf.h>
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>

#include <stdlib.h>

int *ft_range(int min, int max)
{
    int *ptrInt;
    int i;
    int temp;
    temp = min;
    i = 0;
    ptrInt = NULL;
    if (max < min)
    {
        return (ptrInt);
    } else
    {
        ptrInt = malloc(max - min);
    }
    while (i < (max - min))
    {
        *(ptrInt + i) = temp + i;
        i++; /trows segfault at i == 473742332
    }
    return (ptrInt);
}



int *ft_range(int min, int max);

int main()
{
    int i = 0;
    int min = -947483640;
    int max =  947483640;
    int *ptr = ft_range(min, max);

    while (ptr != NULL)
    {
        printf("%d", *ptr);
        printf("%c", '\n');
    }
}

如果我设置更大的值,则段错误也会抛出更大的值。 而且此代码可在较低的值上完美运行。

1 个答案:

答案 0 :(得分:1)

int宽于char时,代码分配的内存不足-这很常见。

根据指向的对象的大小进行分配。 @wildplasser

int *ptrInt;
...
  // ptrInt = malloc(max - min);
  ptrInt = malloc(sizeof *ptrInt * (max - min));
  //              ^------------^   ^---------^ number of elements
  //              +------------+-------------- size of 1 element