我有一个像这样定义的结构:
Parse.Cloud.job("doSth", function(request, status) { // begin Cloud.Job("doSth")
var userQuery = new Parse.Query(Parse.User);
var users = []
var promises = []
promises.push( // Start Promise [0]
userQuery.each(function(user){ // userQuery.each [0]
var currentUser = user;
users.push("LOOP1-"+user.get("firstname"))
console.log("LOOP1-User: "+user.get("firstname"))
//promises2.push( // End Promise [1]
return userQuery.each(function(user){ // userQuery.each [1]
if (user == currentUser){
console.log("$$$$$$$ SAME USER $$$$$$$")
} else {
if (currentUser.get("memberIDs").indexOf(user.get("memberId")) > -1 ){
console.log("Found (different) member!")
}
}
users.push("LOOP2-"+user.get("firstname"))
console.log("LOOP2-User: "+user.get("firstname"))
}) // End userQuery.each [0]
//) // End Promise [1]
}) // End userQuery.each [0]
) // End Promise [0]
Parse.Promise.when(promises).then(function(){
console.log(users)
status.success("Success")
}, function(error){
status.error(error)
})
}) // end Cloud.Job("doSth")
和main函数中的结构指针(不是全局指针):
typedef struct {
char userType; // - The type of the user.
char userName[userName_len]; // - The user's user name.
char password[password_len]; // - The user's password.
char id[id_len]; // - The user's id.
char firstName[userName_len]; // - The users first name.
char lastName[userName_len]; // - The user's surname.
char address[address_len]; // - The user's address.
}Users;
我从文本文件中填充该数据库并将指针发送到它,如下所示:
Users* users_db = NULL;
Fill_Databases将指针传递给其他函数,如下所示:
Fill_Databases(&users_db,&qnty); //qnty is a pointer to Quantity struct used for help.
在该函数中,使用calloc进行内存分配。
现在我需要释放结构,我遇到了运行时问题“触发了一个断点。”
我将它发送到Free_Databases函数的方式与我为em分配内存并尝试释放em的方式相同:
Fill_Users_db(users_db, &*qnty);
那有什么不对?什么是正确的方式来释放他们?
编辑: 分配补充:
void Free_Users_db(Users** users_db, Quantity qnty)
{
int i;
for (i = 0; i < qnty.Users; i++)
{
free(users_db[i]);
users_db[i] = NULL;
}
free(users_db);
users_db = NULL;
puts("users db free");
}
答案 0 :(得分:2)
use lib ...;
在main函数中定义为users_db
结构数组,而不是指针数组。因此,Users
个别数组元素是错误的。此外,您需要取消引用users_db指针,因为您将其作为双指针传递。请尝试以下方法。
free()
答案 1 :(得分:1)
void Free_Users_db(Users** users_db, Quantity qnty)
{
int i;
for (i = 0; i < qnty.Users; i++)
{
free(users_db[i]);
users_db[i] = NULL;
}
free(users_db);
users_db = NULL;
puts("users db free");
}
应该是
void Free_Users_db(Users** users_db, Quantity qnty)
{
int i;
/* for (i = 0; i < qnty.Users; i++)
{
free(users_db[i]);
users_db[i] = NULL;
}*/
free(*users_db);
*users_db = NULL;
puts("users db free");
}
正如您在Fill_Users_db
函数中看到的那样,只有一次调用calloc
。为什么将一个调用映射到分配函数到多个free
调用?这是不正确的。对malloc
或calloc
等分配函数的每次调用都应映射到free
的一次调用。