创建一个函数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');
}
}
如果我设置更大的值,则段错误也会抛出更大的值。 而且此代码可在较低的值上完美运行。
答案 0 :(得分:1)
当int
宽于char
时,代码分配的内存不足-这很常见。
根据指向的对象的大小进行分配。 @wildplasser
int *ptrInt;
...
// ptrInt = malloc(max - min);
ptrInt = malloc(sizeof *ptrInt * (max - min));
// ^------------^ ^---------^ number of elements
// +------------+-------------- size of 1 element