C 将字符**传递到函数中,不会';它不会改变它的值,还是会改变?
我将一个动态分配的变量传递到一个函数中,然后从该函数返回 函数,当我对代码运行输入时,其中一些输入会使程序崩溃 如您所见,我测试了C 将字符**传递到函数中,不会';它不会改变它的值,还是会改变?,c,linux,arrays,ubuntu,C,Linux,Arrays,Ubuntu,我将一个动态分配的变量传递到一个函数中,然后从该函数返回 函数,当我对代码运行输入时,其中一些输入会使程序崩溃 如您所见,我测试了argv数组两次,一次在divide末尾,另一次 我从返回后的时间除以。在第一次检查中,我从 将0索引到argc,但在2次检查中(从返回后,将分回到主) 索引0使for循环崩溃 很明显我做错了什么,知道吗 argv =(char**) realloc(argv, (current+1)*sizeof(char*)); 这可能是罪魁祸首。调用realloc()可以分配
argv
数组两次,一次在divide
末尾,另一次
我从返回后的时间除以。在第一次检查中,我从
将0
索引到argc
,但在2次检查中(从返回后,将分回到主)
索引0
使for
循环崩溃
很明显我做错了什么,知道吗
argv =(char**) realloc(argv, (current+1)*sizeof(char*));
这可能是罪魁祸首。调用realloc()
可以分配一个新的(可能更大的)内存块,将旧块中的数据复制到该内存块中,然后释放旧块。问题不是您正在更改main()
中的argv
的值,而是您没有更改它。您正在解除分配它指向的块,而不更新main()的argv
以指向新块。巨大的代码块,我们再次相遇。…@RichardJ.RossIII:确实如此。您让我发布代码,在这里:)valgrind是您的朋友。如何分割符号和字符串(stringBeforeAmpersand,ampersandPtr)代码>怎么办?不,这仍然是问题所在。您仍然在divide()
函数中调用realloc()
,这仍然会导致argv
成为main()
中的一个悬空指针,并且您仍然在main()
中使用该错误指针,并且(我猜是这样)它仍在崩溃。最简单的修复方法可能是传递argv
的地址,而不是值:divide(char*s,char*t,int*a,char***argv,char d[])
。然后可以分配新块:*argv=realloc(*argv,(当前+1)*sizeof(char*)代码>。这是通过引用传递的C等价物。不,您应该保持main()的argv
不变,但将其作为&argv
传递到divide()
,这意味着“获取“argv”的地址”。如果这对您来说是新的,请拿出您的C书并阅读。请阅读C中的指针。您正在做的是*argv[current]
,与*(argv[current])
相同。您应该改为说(*argv)[current]
。你的解释见+100!在过去的一天里,我一直在努力解决这个问题。你真是太棒了,我的朋友!