找不到此代码有什么问题,它在输入正好 4 个值时按预期工作,但在第五次调用时(甚至在它要求 scanf 之前)它总是给我这个错误: * glibc detected./a2: 双重释放或损坏 (fasttop): 0x0916e018 * *
这是我的程序的一些代码:
typedef struct {
int i;
char str[25];
} typeX;
int main(){
int dSize = 0;
int *dSizePtr = &dSize;
dPointer = (typeX **)malloc(sizeof(typeX *)); // makes an array of pointers
int i;
for (i = 0; i < 100; i++)
makeElement(dPointer, dSizePtr); // Puts values into those pointers
free(dPointer);
return 0;
}
void makeElement(dPointer **, int *dSizePtr){
dPointer = (typeX **)realloc(dPointer, sizeof(typeX *)*(*dSizePtr+1)); // grow the array by one
if (typeX == NULL)
return; // some kind of quit statement, just return for now
dPointer[*dSizePtr] = (typeX *)malloc(sizeof(typeX)); // make a new pointer in the array
scanf("%s", dPointer[*dSizePtr]->str); // input the values of the struct (have to use scanf)
char input[20];
scanf("%s", input);
dPointer[*dSizePtr]->int = atoi(input);
++(*dSizePtr);
}
我知道我不必制作 dSizePtr,我可以传入 &dSize,但是我的程序当前设置的方式(这不完全相同,只是为了可读性而压缩),这就是我必须通过的方式它。
老实说,我不知道为什么会出现这个错误。一直在查看我的代码几个小时并在线阅读并没有找到解决方案。任何帮助将不胜感激!