gpt4 book ai didi

c - 如何重新分配内存?我不断遇到段错误

转载 作者:行者123 更新时间:2023-12-02 04:32:09 24 4
gpt4 key购买 nike

我在主函数中不断遇到段错误。我创建了一个指向我创建的结构的指针,并将其引用传递给另一个分配和重新分配内存的函数。然后在主函数(最初定义它的地方)中访问它会导致段错误。

这是我的测试代码:

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

typedef struct {
char desc[20];
int nr;
} Kap;

void read(Kap *k);

int main(void) {
Kap *k = NULL;
read(k);

printf("__%s %d\n", k[4].desc, k[4].nr);
return 0;
}

void read(Kap *k) {
int size = 3;
k = (Kap*) calloc(size, sizeof(Kap));

k[0].nr = 1;
k[1].nr = 2;
k[2].nr = 3;

strcpy(k[0].desc, "hello0");
strcpy(k[1].desc, "hello1");
strcpy(k[2].desc, "hello2");

size *= 2;
k = (Kap*) realloc(k, sizeof(Kap)*size);
if(k == NULL) {
printf("ERROR\n");
exit(EXIT_FAILURE);
}


k[3].nr = 4;
k[4].nr = 5;
k[5].nr = 6;

strcpy(k[3].desc, "hello3");
strcpy(k[4].desc, "hello4");
strcpy(k[5].desc, "hello5");
}

我做错了什么?

最佳答案

这是您遇到的问题的简化版本:

#include <stdio.h>

void func(int x)
{
x = 10;
}

int main()
{
int x = 5;
printf("x = %d\n", x);
func(x);
printf("x = %d\n", x);
}

x 不改变的原因与程序中 k 不改变的原因相同。解决这个问题的一个简单方法是:

Kap *read()
{
Kap *k = calloc(...);
...
k = realloc(k, ...);
...
return k;
}

int main()
{
Kap *k = read();
...
}

关于c - 如何重新分配内存?我不断遇到段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22794764/

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