gpt4 book ai didi

c - 正在重新分配的 int 指针未分配 C

转载 作者:行者123 更新时间:2023-11-30 14:45:10 25 4
gpt4 key购买 nike

我见过其他人问过这个问题,但似乎没有看到答案,或者问题出在字符或其他一些问题上。我真的不明白为什么会出现这个错误,因为我正在分配。我的原始代码要长得多,但我简化了出现错误的内容,并且出现了完全相同的错误,所以这就是问题所在。

#include <stdio.h>
#include <stdlib.h>

void addInteger(int **iArr, int *newI, int * count);
int main(){
int* iArr = malloc(0);
int iCount = 0;
int newInt = 0;
int i;
for(i=0;i<5;i++){
printf("Enter number: ");
scanf("%d",&newInt);
iCount++;
iArr = realloc(iArr, sizeof(int*) * iCount);
addInteger(&iArr, &newInt, &iCount);
}
free(iArr);
return 0;
}
void addInteger(int **iArr, int *newI, int * count){

iArr[*count-1] = malloc(sizeof(int));
iArr[*count-1] = newI;
}

使用我的输入运行它会在第二个数字上出现错误:

输入数字:1

输入数字:3

a.out(1291,0x7fffb62df380) malloc: *** 对象 0x7ffeed674b78 错误: 未分配正在重新分配的指针

***在malloc_error_break中设置断点进行调试

中止陷阱:6

最佳答案

您的取消引用存在一些错误:

变量iArr是一个指向int类型数组的指针。

但是您将其地址传递给 addInteger,然后用随机输入值替换该地址。

然后,这个随机输入值被传递给 realloc 而不是您分配的指针,该指针现在已经消失了。

所以你会得到错误。

让我们修复您的代码以避免这种情况:

//NOTE: there is no need to pass newI and count as pointers, because the function does not change them!
void addInteger(int **iArr, int newI, int count);
int main(){
//1. If you want iArr to be array of pointers, you need to start with ** pointer to pointer
//2. Just initialize with NULL, when realloc gets NULL it works just like malloc
int** iArr = NULL;
int iCount = 0;
int newInt = 0;
int i;

for(i=0;i<5;i++){
printf("Enter number: ");
scanf("%d",&newInt);
iCount++;
iArr = realloc(iArr, sizeof(int*) * iCount);
//You do not need to pass addresses here because your function does not change its parameters
addInteger(iArr, newInt, iCount);
}

free(iArr); //this will cause a memory leak!
//you need to loop over the array and free each integer first.

return 0;
}

void addInteger(int **iArr, int newI, int count){
iArr[count - 1] = malloc(sizeof(int));
*iArr[count - 1] = newI;
/* Note the * here - it is important!
Without it, you would overwrite the pointer you just allocated in the prevoius line
But the * tells the compiler "put the int value at the address specified by the array
*/
}

关于c - 正在重新分配的 int 指针未分配 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53238653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com