gpt4 book ai didi

c - C 结构体的双指针内存分配

转载 作者:行者123 更新时间:2023-11-30 15:54:24 25 4
gpt4 key购买 nike

找不到这段代码有什么问题,当输入恰好 4 个值时它会按预期工作,但在第五次调用时(在它甚至要求 scanf 之前)它总是给我这个错误:* glibc 检测到 ./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,但是我的程序当前设置的方式(这并不完全相同,只是为了可读性而压缩),这就是我的方式必须通过它。

老实说,我不知道为什么会出现这个错误。花了几个小时查看我的代码并在线阅读,但尚未找到解决方案。任何帮助将不胜感激!

最佳答案

问题在于您的函数 makeElement 获取的是 dPointer 的值,而不是其引用。当您重新分配数据时,最初分配的 block 将被释放。但是 makeElement 范围之外的 dPointer 没有改变;

由于实际内存分配的数量大于 sizeof(typeX*),因此运行时错误会被延迟

关于c - C 结构体的双指针内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13001502/

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