C 在将值插入数组期间,值是正确的。但在那之后,我得到了不同的价值观
我创建了一个函数,它应该返回一个特定数字的索引数组。 函数属性为:数组大小、数组、数字和指针 在下面的例子中,我得到了不同的值。我在两个地方检查值: 1) 插入后:哪个看起来正确 2) 在对返回的数组进行迭代期间:返回不同的值,包括地址(为什么?)C 在将值插入数组期间,值是正确的。但在那之后,我得到了不同的价值观,c,arrays,C,Arrays,我创建了一个函数,它应该返回一个特定数字的索引数组。 函数属性为:数组大小、数组、数字和指针 在下面的例子中,我得到了不同的值。我在两个地方检查值: 1) 插入后:哪个看起来正确 2) 在对返回的数组进行迭代期间:返回不同的值,包括地址(为什么?) intmain() { 尺寸\u t尺寸已返回; int arrayOfInt[]={12,15,2,8,13,3,14,1,13,6,0,8,14,15,14,2,8,0,15,8,8,9,8,0,14}; size\u t size=sizeof
intmain()
{
尺寸\u t尺寸已返回;
int arrayOfInt[]={12,15,2,8,13,3,14,1,13,6,0,8,14,15,14,2,8,0,15,8,8,9,8,0,14};
size\u t size=sizeof(arrayOfInt)/sizeof(int);
size_t*returnedArray=find_all(size、arrayFint、8和sizeToBeReturned);
对于(int i=0;i < /代码> 您分配为<代码> int <代码>的动态数组,但您考虑它
作为读取/写入时的大小\u t
(更大)的动态数组
toReturnArray = (size_t *) malloc(sizeof(size_t)); // not sizeof(int)
toReturnArray = realloc(toReturnArray, (sizeOfArray+1) * sizeof(size_t)); // not sizeof(int)
例如,如果在您的系统上,sizeof(int)
为4,sizeof(size\u t)
如果为8,则分配的内存为所需大小的一半
另外我没有看到的是realloc()
中缺少的+1
顺便说一下,realloc()
接受一个空指针(其行为类似于
malloc()。2) 给malloc打个电话。这将解决您的所有问题。(1)如果您为类型为size\t
的数组分配内存,请不要在计算大小时使用sizeof(int)
。(2) 您必须通过分配sizeOfArray+1
元素来满足数组大小的最终增加。(顺便说一下,realloc(NULL,new\u size)
的行为类似于malloc(new\u size)
,因此您不必将第一次分配视为特例。)
int main()
{
size_t sizeToBeReturned;
int arrayOfInt[] = {12, 15, 2, 8, 13, 3, 14, 1, 13, 6, 0, 8, 14, 15, 14, 14, 2, 8, 0, 15, 8, 8, 9, 8, 0, 14};
size_t size = sizeof(arrayOfInt) / sizeof(int);
size_t *returnedArray = find_all(size, arrayOfInt, 8, &sizeToBeReturned);
for (int i = 0; i < sizeToBeReturned; i++) {
printf("%ld\n", returnedArray[i]);
//when I iterate the returned array, the values comes massed up
}
return 0;
}
size_t *find_all(size_t a, const int array[a], int number, size_t * z)
{
//printf("Array size: %zu\n", a);
size_t *toReturnArray = NULL;
size_t sizeOfArray = 0;
for (size_t i = 0; i < a; i++) {
if (array[i] == number) {
if (toReturnArray == NULL) {
toReturnArray = (size_t *) malloc(sizeof(int));
} else {
toReturnArray = realloc(toReturnArray, (sizeOfArray) * sizeof(int));
}
toReturnArray[sizeOfArray] = i;
printf("%ld\n", toReturnArray[sizeOfArray]);
//Here I can see the correct value
sizeOfArray++;
}
}
printf("%ld\n", sizeOfArray);
*z = sizeOfArray;
return toReturnArray;
}
toReturnArray = (size_t *) malloc(sizeof(size_t)); // not sizeof(int)
toReturnArray = realloc(toReturnArray, (sizeOfArray+1) * sizeof(size_t)); // not sizeof(int)