声明临时struct作为参数传递 - Struct被覆盖。如何在新的内存位置声明结构?

时间:2015-12-16 17:28:17

标签: c multithreading pointers struct

我试图在这个循环的每次迭代中初始化一个新结构以传递给一个函数;问题是相同的结构继续被写入或重用(内存地址是相同的)。如何声明一个不会被覆盖的新结构,以便我可以将指针传递给另一个函数?

while(dirs[i] != NULL){
    thread_arg narg;

1 个答案:

答案 0 :(得分:1)

如果您希望数据具有超过while循环迭代的持久性,而其他迭代继续,那么您需要动态分配,如下所示:

while(dirs[i] != NULL){
    thread_arg * nargp = (thread_arg *) malloc(sizeof(thread_arg)); 

你现在有一个指针而不是一个值,但这可能适合你的使用(即你应该把它当作一个指针而不是一个值)。

当你完成数据时,你需要释放数据。你在哪里/怎么做取决于你的用例 - 你提到你正在将数据传递给另一个函数,所以如果该函数使用它并且没有其他用途,那么一个解决方案是该函数可以释放它(free(nargp) )返回之前。