Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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 realloc用法_C_Memory_Realloc - Fatal编程技术网

C realloc用法

C realloc用法,c,memory,realloc,C,Memory,Realloc,我试图动态地增加int数组的内存,但是在让它工作时遇到了问题。它没有扩展并向数组中添加更多元素,我不确定我做错了什么。 请帮忙 int* fibs = NULL; void genFibs(){ int i = 1,curSize = 0,curNum = 0; int flag = 1; while(flag){ if(curSize != 0 &&curSize != 1){ curNum = fibs[cur

我试图动态地增加
int
数组的内存,但是在让它工作时遇到了问题。它没有扩展并向数组中添加更多元素,我不确定我做错了什么。 请帮忙

int* fibs = NULL;

void genFibs(){
    int i = 1,curSize = 0,curNum = 0;
    int flag = 1;
    while(flag){
        if(curSize != 0 &&curSize != 1){
            curNum = fibs[curSize-2]+fibs[curSize-1];
        }else if(curSize-1 == 1){
            curNum = fibs[curSize-1]+fibs[curSize-1];
        }else{
            curNum = 1;
        }
        if(curNum<=10){
            curSize++;
            fibs = (int*)realloc(fibs,curSize*sizeof(int));
            fibs[curSize-1] = curSize;
        }else{
            flag = 0;
        }
    }
  }
}

void printFibs(){
    int size = sizeof(fibs)/sizeof(int);
    int i = 0;
    for(i = 0;i<size;i++){
        printf("%d is: %d\n",i,fibs[i]);
    }
}
int*fibs=NULL;
void genFibs(){
int i=1,curSize=0,curNum=0;
int标志=1;
while(旗帜){
if(curSize!=0&&curSize!=1){
curNum=fibs[curSize-2]+fibs[curSize-1];
}else if(curSize-1==1){
curNum=fibs[curSize-1]+fibs[curSize-1];
}否则{
curNum=1;
}

如果(curNum
sizeof(fibs)
是指针
fibs
的大小,它是常数,因此您的打印功能将始终打印相同数量的元素
是指针的大小
fibs
,它是常数,因此您的打印函数将始终打印相同数量的元素

好吧,您的打印代码是错误的。
sizeof(fibs)
将始终被计算为
sizeof(int*)
,因为它只是一个指针

您必须找到将
大小
传递给
打印
函数的方法。例如,它可能是数组的第一个值。但这是实现细节,由您决定


编辑:将
sizeof(void*)
更改为
sizeof(int*)
,因为指针大小可能会变化,正如pmg所指出的那样。

嗯,您的打印代码是错误的。
sizeof(fibs)
将始终被评估为
sizeof(int*)
,因为它只是一个指针

您必须找到将
大小
传递给
打印
函数的方法。例如,它可能是数组的第一个值。但这是实现细节,由您决定



编辑:正如pmg所指出的,由于指针大小可能会变化,所以将
sizeof(void*)
更改为
sizeof(int*)

您是否在
realloc()之前使用
malloc()
calloc()
fib
分配了内存
?确切的错误是什么?是无限循环吗?不,这个函数我只是想生成fibs数组。@Xaqq有更多的代码、逻辑内容,只是显示重要的realloc部分。还有,出了什么问题?你能告诉我们更多吗?因为这看起来很好。你是否使用
malloc()为
fibs
分配了内存
calloc()
realloc()之前
?确切的错误是什么?是无限循环吗?不,这个函数我只是想生成fibs数组。@Xaqq有更多的代码、逻辑内容,只是显示了重要的realloc部分。还有,出了什么问题?你能告诉我们更多吗?因为这看起来很好好好,我要离开这篇文章了“这两个数组之间有什么区别?我的数组在技术上是相同的,不是吗?仅供参考:
void*
int*
不一定有相同的大小(以及对齐要求、填充和…)@pmg oO不知道。对齐要求和填充可以理解,但是大小。你有任何链接解释原因和时间吗?我以为所有指针都有相同的大小。@Xaqq:它们不必。它们只需在
void*
@Xaqq:参见中转换即可。“指向其他类型的指针不需要具有相同的表示形式或对齐要求。”好吧,我刚结束这篇文章“这两者之间有什么区别?”我的数组在技术上是相同的,不是吗?仅供参考:
void*
int*
不一定具有相同的大小(以及对齐要求和填充和…)@pmg oO不知道。对齐要求和填充可以理解,但是大小。你有任何链接解释原因和时间吗?我以为所有指针都有相同的大小。@Xaqq:它们不必。它们只需在
void*
@Xaqq:参见中转换即可指向其他类型的指针不需要具有相同的表示或对齐要求。”