Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将字符**传递到函数中,不会';它不会改变它的值,还是会改变?_C_Linux_Arrays_Ubuntu - Fatal编程技术网

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!在过去的一天里,我一直在努力解决这个问题。你真是太棒了,我的朋友!