【发布时间】:2022-11-17 02:53:38
【问题描述】:
我在返回带有函数参数的动态数组指针时遇到问题。我遇到段错误
#include <stdio.h>
#include <stdlib.h>
void createArray(int *ptr, int n)
{
ptr = malloc(n * sizeof(int));
for(int i = 1; i <= n; ++i)
{
*(ptr + (i - 1)) = i*i;
}
}
int main() {
int *array = NULL;
int n = 5;
createArray(array, n);
for(int i = 0; i < n; ++i)
{
printf("%d", array[i]);
}
return 0;
}
当我从 1 到 n 时,我必须用 i*i 填充我的数组。 我没有收到任何错误或警告。只是关于分段错误的消息。进程以退出代码 139 结束(被信号 11 中断:SIGSEGV)
【问题讨论】:
-
请记住,C 仅传递函数参数按价值.这意味着调用中使用的值是复制进入函数局部参数变量。所以修改局部参数变量本身只会修改这个副本,而不会修改调用中使用的原始值。请研究一下在 C 中模拟引用传递.
-
另一方面,为什么
*(ptr + (i - 1))而不是更容易阅读的ptr[i - 1]? -
是的,所以我应该做参数(int ** ptr)?
-
问题是
*ptr[i - 1],因为它和*(ptr[i - 1])一样,而你需要(*ptr)[i - 1]。 -
或者,您可以定义一个
int *createArray(int n)函数并使其返回指向已分配内存的指针。称它为array = createArray(n);。