我知道这可能看起来像一个重复的问题;但我正在寻找的是我的问题的代码特定的答案(而不是推断另一个答案)。我想在c中添加一个动态数组,但是我在分配数组中的最后一个元素时遇到了问题(当我使用gdb时,值首先被赋值给我的数组,但是后来因为没有明显的原因而消失)。这是我的代码:
typedef struct Server {
char* name;
pid_t pid;
} Server;
//global variables
int num_servers;
Server* servers;
//code inside a function and a WHILE loop
resizeArray();
//create struct
Server s = createServer(args[3], id);
//add to array
insertServer(s);
++num_servers;
//code for allocating memory for array
int resizeArray(){
//initialize array if needed
if( num_servers == 0 ){
servers = (Server*) malloc(1 * sizeof(Server));
//TODO check malloc
}
//realloc for one more server instance on array
else{
servers = realloc(servers, (num_servers+1) * sizeof(Server));
//TODO check realloc
}
}
//basically a constructor
Server createServer(char* name, pid_t id){
Server s;
s.name = malloc(strlen(name) * sizeof(char));
strcpy(s.name, name);
s.pid = id;
return s;
}
//adds server to array (always last element)
int insertServer(Server serv){
servers[num_servers - 1] = serv;
//servers[num_servers - 1].name = serv.name;
//servers[num_servers - 1].pid = serv.pid;
return 0; //TODO probably change return type to void
}
然而无论出于何种原因,这段代码实际上并没有使数组中的最后一个元素保持我想要的值(当我调试它时看起来像是分配了内存,但是服务器 - > pid和服务器 - >名称不是我设定的)。任何帮助将不胜感激。