如何让这些大阵列更有效率?我添加它时会出现分段错误,但是当我删除它们时,分段错误就会消失。我有几个这样没有显示的大数组。我需要数组来处理我正在阅读的文件。在下面的代码中,我使用stdin而不是我通常使用的文件指针。我也在使用后释放每个大阵列。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int main(void) {
int players_column_counter = 0;
int players_column1[100000] = {0};
char *players_strings_line_column2[100000] = {0};
char *players_strings_line_column3[100000] = {0};
char *players_strings_line_column4[100000] = {0};
char *players_strings_line_column5[100000] = {0};
char *players_strings_line_column6[100000] = {0};
char line[80] = {0};
while(fgets(line, 80, stdin) != NULL)
{
players_strings_line_column2[players_column_counter] =
malloc(strlen("string")+1);
strcpy(players_strings_line_column2[players_column_counter],
"string");
players_column_counter++;
}
free(*players_strings_line_column2);
free(*players_strings_line_column3);
free(*players_strings_line_column4);
free(*players_strings_line_column5);
free(*players_strings_line_column6);
return 0;
}
答案 0 :(得分:0)
详细了解C dynamic memory allocation。学习使用malloc
and calloc
and free
。请注意malloc
和calloc
(和realloc
)可能会失败,您需要处理它。请参阅this和that。
call stack的大小有限(通常为一个或几个兆字节;实际限制是操作系统和计算机特定的)。有一个超过几千字节的调用帧是不合理的。但是calloc
或malloc
可能允许分配几千兆字节(实际限制取决于您的系统),或者当前笔记本电脑或台式机上至少数百兆字节。本地 - automatic variable - 超过几百个元素的数组几乎总是错误的(并且肯定是非常难闻的气味)。
顺便说一句,如果您的系统有getline(3),您可能应该使用它(例如here)。同样适用于strdup(3)和asprintf(3)。
如果您的系统没有getline
,strdup
或asprintf
,您应该考虑实施它们,或借用它们的一些免费软件实现。
编译所有警告和调试信息(例如gcc -Wall -Wextra -g
与GCC)。改进您的代码以获得警告。 使用调试器 gdb
(和valgrind)。谨防undefined behavior(例如buffer overflow s)和memory leaks。
研究现有free software的源代码(例如,在github和/或某些Linux distribution上)以获取灵感。