我是C的新手,我试图在函数中初始化一个数组。
但它不起作用,因为如果我想在main方法中打印值,我总是会遇到分段错误。
static void array(int *i)
{
int j = 0;
i = (int *) malloc(5 * sizeof (int));
for (j = 0; j < 5; j++) {
i[j] = j;
}
for (j = 0; j < 5; j++) {
printf("Hello: %d\n", i[j]);
}
}
/* Main entry point */
int main(int argc, char *argv[])
{
int j;
int *i = NULL;
array(i);
for (j = 0; j < 5; j++) {
printf("Hello: %d\n", i[j]);
}
return 0;
}
如果有人可以修复代码并解释它是如何工作的,那会很好。
答案 0 :(得分:3)
static void array(int **i)
{
int j = 0;
*i = malloc(5 * sizeof (int));
for (j = 0; j < 5; j++) {
(*i)[j] = j;
}
for (j = 0; j < 5; j++) {
printf("Hello: %d\n", (*i)[j]);
}
}
/* Main entry point */
int main(int argc, char *argv[])
{
int j;
int *i = NULL;
array(&i);
for (j = 0; j < 5; j++) {
printf("Hello: %d\n", i[j]);
}
return 0;
}
您正在按值将指针传递给数组,因此您需要做的是将指针传递给指针,然后设置/使用它。
至于为何不应该转换malloc的结果,请参阅:Do I cast the result of malloc?和 Specifically, what's dangerous about casting the result of malloc?
答案 1 :(得分:1)
为了从函数内部向变量分配内存,必须将指针作为函数参数传递给指针,取消引用指针然后分配内存。
或伪代码
function(int **i)
{
*i = malloc...
}
int *i = NULL;
function(&i);
这是实现目标的方法之一。您还可以返回malloc返回的指针。 而且,从我读过的材料来看,最好不要转换malloc的返回类型。