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;
}
如果(curNumsizeof(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:参见中转换即可指向其他类型的指针不需要具有相同的表示或对齐要求。”