【发布时间】:2019-01-23 20:21:09
【问题描述】:
我正在尝试创建一个结构元素数组并在需要新元素时重新分配。该数组必须是一个指针,因为我想从函数中返回它。
我有以下代码:
#include <stdio.h>
#include <stdlib.h>
struct rle_element {
int length;
char character;
};
void get_rle() {
struct rle_element *rle = malloc(sizeof(struct rle_element*));
struct rle_element **rle_pointer = &rle;
rle = realloc(rle, sizeof(rle) + sizeof(struct rle_element*));
(*rle_pointer)->length = 10;
printf("%d\n", (*rle_pointer)->length);
rle_pointer = &rle+1;
(*rle_pointer)->length = 20;
printf("%d\n", (*rle_pointer)->length);
}
int main() {
get_rle();
return EXIT_SUCCESS;
}
但是这段代码并没有真正起作用。 我认为重新分配是不对的。
现在我有以下代码可以正常工作。 但我也可以在不分配的情况下使用 rle[2] 或 rle[3]。我认为我的程序只为两个项目分配空间。
#include <stdio.h>
#include <stdlib.h>
struct rle_element {
int length;
char character;
};
void get_rle() {
struct rle_element *rle = malloc(sizeof(struct rle_element));
struct rle_element **rle_pointer = &rle;
rle = realloc(rle, sizeof(rle) + sizeof(struct rle_element));
rle[0].length = 10;
printf("%d\n", rle[0].length);
rle[1].length = 20;
printf("%d\n", rle[1].length);
}
int main() {
get_rle();
return EXIT_SUCCESS;
}
【问题讨论】:
-
你忘了问问题。
-
不工作是什么意思?它应该做什么以及实际发生了什么?
-
当我运行上面的代码时,它会在第一行打印 10,在第二行打印“Segmentation fault”。
-
sizeof(struct rle_element*)是指针的大小(可能是 4 或 8 个字节,具体取决于您的硬件)。你想要sizeof(struct rle_element)。 -
我试过了,但我得到了同样的错误信息。