【发布时间】:2020-03-14 05:34:23
【问题描述】:
我写了一些代码来创建一个动态的字符串数组,一旦满了就会自动调整大小。 即使在其中插入元素似乎没有问题,但在尝试打印所有插入的值时出现段错误。
我已经为数组定义了一个 10 的起始大小,并且我假设数组中的每个字符串不会超过 30 个字符。
执行 main() 时,程序应该为 10 个 char 指针分配足够的内存,并且对于这些指针中的每一个,在 initialize_concordance() 函数中分配的内存足以容纳 30 个字符的字符串。
#include <stdlib.h>
#include <stdio.h>
#define MAX_STRING_LENGTH 30
#define EXTENSION_STEP 10
int size = 0;
int max_size = 10;
void initialize_concordance(char **concordance) {
for (int i = size; i < max_size; i++) {
concordance[i] = malloc(MAX_STRING_LENGTH * sizeof(char));
}
}
void push(char **concordance, char *word) {
if (size >= max_size) {
max_size += EXTENSION_STEP;
realloc(concordance, max_size);
initialize_concordance(concordance);
}
concordance[size] = word;
size++;
}
int main(int argc, char** argv) {
char **concordance = malloc(max_size * sizeof(char*));
initialize_concordance(concordance);
char *wordRead = "Hello";
push(concordance, wordRead);
push(concordance, wordRead);
push(concordance, wordRead);
push(concordance, wordRead);
push(concordance, wordRead);
push(concordance, wordRead);
push(concordance, wordRead);
push(concordance, wordRead);
push(concordance, wordRead);
push(concordance, wordRead);
push(concordance, wordRead);
push(concordance, wordRead);
push(concordance, wordRead);
push(concordance, wordRead);
push(concordance, wordRead);
push(concordance, wordRead);
push(concordance, wordRead);
printf("%s\n", concordance[0]);
printf("%s\n", concordance[1]);
printf("%s\n", concordance[2]);
printf("%s\n", concordance[9]);
printf("%s\n", concordance[10]);
printf("%s\n", concordance[3]);
printf("%s\n", concordance[4]);
}
【问题讨论】:
-
提示 1:想想
realloc返回的结果。提示 2:如何从函数返回值(如新指针)? -
@Someprogrammerdude 是对的,他的意思是 --> 在 realloc 之后更新指针
-
@Someprogrammerdude 不应该像下面这样工作吗? void *tmp = realloc(concordance, max_size); if (tmp != NULL) { concordance = tmp; }
-
@JoaquinPletcher 这是一个开始。现在考虑如何返回新的
concordancè指针。
标签: c arrays segmentation-fault