分配字符串数组
Posted
技术标签:
【中文标题】分配字符串数组【英文标题】:Allocating array of strings 【发布时间】:2022-01-16 12:46:02 【问题描述】:今天我在分配 char 数组(字符串数组)时遇到问题,我编写了这个函数来执行此操作,但是在打印数组时,我遇到了一些内存问题(例如 Segmentation Fault)。 这是我的尝试:
char **alloca_memoria(char **linguaggio,
int n_sequenze,
int *errore)
int i;
linguaggio = (char**) calloc( n_sequenze,
sizeof(char*));
if (linguaggio != NULL)
for ( i = 0;
i < n_sequenze;
i++ )
linguaggio[i] = (char*) calloc( MAX_SEQ ,
sizeof(char));
if ( linguaggio[i] == NULL )
*errore = 1;
else
*errore = 0;
else
*errore = 1;
return linguaggio;
我的目的只是让它分配内存并返回值错误以检查分配是否成功。 我真的找不到我做错了什么。
附言n_sequenze
是字符串的实际数量,MAX_SEQ
是每个字符串的最大大小。
【问题讨论】:
请发minimal reproducible example。 @WhozCraig 所以在函数中使用 calloc 只是在该函数内部分配内存,而不是在程序内部全局分配内存?所以如果我想让程序工作我必须在主函数中分配内存? 不。阅读 Vlad 的答案,可能会得到一本关于 C 的好书。 【参考方案1】:如果你想改变函数内传递的指针语言,那么你需要通过引用传递它。例如
char **alloca_memoria(char ***linguaggio,
int n_sequenze,
int *errore)
int i;
*linguaggio = (char**) calloc( n_sequenze,
sizeof(char*));
//...
( *linguaggio )[i] = (char*) calloc( MAX_SEQ ,
sizeof(char));
//...
return *linguaggio;
或者最好像这样声明函数
char **alloca_memoria( int n_sequenze, int *errore)
//...
char **linguaggio = (char**) calloc( n_sequenze,
sizeof(char*));
//...
在调用者中你可以写
char **linguaggio = alloca_memoria( n_sequenze, &errore );
【讨论】:
参数linguaggio
只是多余的,应该删除,而应该使用局部变量。该函数返回一个值。够了。
在参数中输入 ***linguaggio
是否有误,还是我需要这样传递?
@Pinguiz 如果要传递指针 linguaggio 声明为 char **linguaggio; 则函数参数声明正确通过引用函数。那就是对应的参数表达式将是 &linguaggio以上是关于分配字符串数组的主要内容,如果未能解决你的问题,请参考以下文章