gpt4 book ai didi

C 编程更有效地使用大数组

转载 作者:行者123 更新时间:2023-11-30 20:32:46 25 4
gpt4 key购买 nike

如何使这些大数组更加高效?当我添加它们时,我遇到了段错误,但是当我删除它们时,段错误就消失了。我有几个像这样的大数组没有显示。我需要这么大的数组来处理我正在读取的文件。在下面的代码中,我使用 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;
}

最佳答案

了解更多关于 C dynamic memory allocation 的信息。学习使用malloc and calloc and free 。请注意,malloccalloc(以及 realloc)可能会失败,您需要对此进行处理。请参阅thisthat .

call stack大小有限(通常为一兆或几兆字节;实际限制取决于操作系统和计算机)。调用帧超过几千字节是不合理的。但是,callocmalloc 可能允许分配几 GB(实际限制取决于您的系统),或者在当前笔记本电脑或台式机上至少分配数百兆字节。本地 - automatic variable - 超过数百个元素的数组几乎总是错误的(并且肯定是非常难闻的气味)。

顺便说一句,如果您的系统有getline(3) ,您可能应该使用它(例如 here )。 strdup(3) 同样如此和 asprintf(3) .

如果您的系统没有 getlinestrdupasprintf,您应该考虑实现它们,或者借用它们的一些免费软件实现。

使用所有警告和调试信息进行编译(例如 gcc -Wall -Wextra -gGCC )。改进您的代码以消除警告。 使用调试器 gdb(和 valgrind )。谨防undefined behavior (例如 buffer overflow s)和 memory leaks .

研究现有free software的源代码(例如 github 和/或某些 Linux distribution )以获得灵感。

关于C 编程更有效地使用大数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46993815/

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