Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在将值插入数组期间,值是正确的。但在那之后,我得到了不同的价值观_C_Arrays - Fatal编程技术网

C 在将值插入数组期间,值是正确的。但在那之后,我得到了不同的价值观

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

我创建了一个函数,它应该返回一个特定数字的索引数组。 函数属性为:数组大小、数组、数字和指针

在下面的例子中,我得到了不同的值。我在两个地方检查值: 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(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)