在这个问题,有人建议意见,我应该不会投的结果malloc,即
int *sieve = malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)
而不是:
int *sieve = (int *) malloc(sizeof(int) * length);
Run Code Online (Sandbox Code Playgroud)
为什么会这样呢?
我的C现在不仅仅是生锈,所以我没有创造出我认为应该非常基本的东西.
允许我将字符数组称为此帖子的字符串.它会让我和你都清楚.
我所拥有的是一个可以容纳1个或更多字符串的数组.例如{"ab","cd","ef"}.我想创建另一个数组来存储字符串数组的多个版本.所以像{{"ab","cd","ef"},{"gh","ij"},{"kl"}}.
我现在拥有的是:
char *arrayOfStrings[50]; // a single array to hold multiple strings
char **arrayOfArraysOfStrings[10]; // array to hold multiple snapshots of arrayOfStrings
Run Code Online (Sandbox Code Playgroud)
字符串数组随着时间的推移而变化,我使用字符串数组数组来基本保存arrayOfStrings的历史快照.当我需要访问数据的快照数组时,我的问题出现了.这是我必须将内容放入快照数组的代码:
arrayOfArraysOfStrings[input_index] = arrayOfStrings; // you can assume input_index is updated correctly, I've already checked that.
Run Code Online (Sandbox Code Playgroud)
这似乎是不正确的,因为当我尝试访问并打印出快照数组的内容时,它只打印出来自最新的arrayOfStrings的信息.我想要的想法是将arrayOfChars所指向的地址存储在快照数组的一个条目中,以便我以后可以访问它.
现在,访问快照数组中的条目是这样完成的:
arrayOfArraysOfChars[historicalIndex][indexOfTargetChar]
Run Code Online (Sandbox Code Playgroud)
我想回答几个问题:
--edit 4/18--部分问题在于我在arrayOfArraysOfStrings中设置指针指向arrayOfStrings指向的相同内容.这是糟糕的,因为arrayOfStrings被编辑.我需要一些方法来复制2D数组...最好是通过简单地为arrayOfStrings分配一个新的内存块来指向.
当我将双指针传递给函数以初始化内存时,我遇到了分段错误
int main()
{
double **A;
initialize(A, 10, 10);
......
}
void initialize(double **A, int r, int c)
{
A = (double **)malloc(sizeof(double *)*r);
for(int i = 0; i< r; i++) {
A[i] = (double *)malloc(sizeof(double) *c);
for(int j = 0; j < c; j++) {
A[i][j] = 0.0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何将双指针传递给函数.....