【发布时间】:2022-01-11 12:05:03
【问题描述】:
我设法在函数中将值放入指针中,但是当我回到主函数时,我只是没有得到值。我哪里错了?发送参数错误?分配错误?代码如下:
bool wc(int* nlines, int* nwords, int* nchars)
{
int lines=5,chars=6,words=7;
nchars = (int *) malloc(chars*sizeof(int));
*nchars = chars;
nlines = (int *) malloc(lines*sizeof(int));
*nlines = lines;
nwords = (int *) malloc(words*sizeof(int));
*nwords = words;
}
int main() {
int* chars; int* words; int* lines;
int res = wc(&lines,&words,&chars);
printf("%d %d %d\n",chars,lines,words);
return 0;
}
【问题讨论】:
-
C and pointer in a function - changes do not save 不太清楚您为什么要为此使用
malloc。您只是在每个参数中存储一个值,并且假设lines、words和chars被声明为int,它们已经为此指向空间。如果您删除malloc行,它应该可以正常工作。如果这是minimal reproducible example,我们肯定会知道。 -
@RetiredNinja 我不知道是什么问题,所以我只是分配了。我也试过不这样做。顺便说一句,我没有返回指针的选项,不确定你链接的内容是否对我有帮助。
-
在wc中,nlines,nwords,nchar是用main()的一些变量的地址初始化的局部变量,它们的内容被动态缓冲区的地址替换(在wc中用malloc本地),那么你写入这些动态缓冲区(因此不在主变量中)。所以高层变量是不变的。
-
值得注意的是,你的函数说它会返回一个值,但它没有。这会导致未定义的行为。
-
@RetiredNinja 是的,我没有添加我返回 true 的那部分,因为它与我的问题无关。