gpt4 book ai didi

c - 我在一个函数中将值添加到 C 数组中,但在后面的函数中数组仍然为空,这是怎么回事?

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

指针已声明

int *v;

并且调用了这两个函数。

createMemObjects(M, N, v, context);
transferToDevice(M, v, commands);

因此,在我将 int *pv 传递到的第一个函数中,我填充了数组:

pv = malloc(sizeof(int) * M); 
memset(pv, 0, sizeof(int)*M);

for (int i = 0; i<M; i++) {
pv[i] = N; //Initialise every element of vector with N.
printf("Element %d: %d\n", i, pv[i]);
}

打印结果显示pv已填充N=2。

在稍后的函数中,*pv 再次作为参数,我使用类似的打印循环:

for (int i = 0; i<M; i++) {
printf("Element %d: %d\n", i, pv[i]);
}

它显示所有元素都回到 0,而不是 2s。我做错了什么?很确定我已经正确使用了指针,但是我错过了什么吗?

最佳答案

正如所评论的,您需要传递指针 v地址,因为 C 按值传递参数(包括指针)。正如代码所示,v副本createMemObjects() 中被分配,因此调用者看不到更改:

/* Invoke as */
createMemObjects(M, N, &v, context);

v 的参数类型更改为 int** 并在 createMemObjects() 内:

*pv = malloc(sizeof(int) * M);

紧随 malloc() 之后的 memset() 是多余的,因为 for 正在初始化中的每个 int pv

关于c - 我在一个函数中将值添加到 C 数组中,但在后面的函数中数组仍然为空,这是怎么回事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13495472/

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