führt. Also habe ich ein paar Updates zu meinem RPC-Programm gemacht und jetzt seine Segfaulting, ich bin mir nicht sicher, was ich hier falsch mache. Der Unterschied zwischen den beiden ist das Entfernen der if-Anweisungen, die der Struktur args
Werte zuweisen.Es ist etwas passiert, als ich Werte zu meiner Struktur erstellt und hinzugefügt habe, was zu einem segfault
Segfaults
void
database_1(char *host, char *action, char *message)
{
printf("Action: %s\n", action);
printf("Message: %s\n", message);
CLIENT *clnt;
rpc_args *result_1;
//struct rpc_args action_1_arg;
//rpc arguments struct to pass to server
struct rpc_args *args = malloc(sizeof(struct rpc_args));
char *id = generate_id();
if (strcmp(action, "GET") == 0) {
strcpy(args->action, action);
strcpy(args->id, id);
} else if(strcmp(action, "PUT") == 0) {
strcpy(args->action, action);
strcpy(args->id, id);
strcpy(args->message.content, message);
}
#ifndef DEBUG
clnt = clnt_create (host, DATABASE, ASSIGNMENT_7, "udp");
if (clnt == NULL) {
clnt_pcreateerror (host);
exit (1);
}
#endif /* DEBUG */
result_1 = action_1(args, clnt);
if (result_1 == (rpc_args *) NULL) {
clnt_perror (clnt, "call failed");
}
#ifndef DEBUG
free(args);
clnt_destroy (clnt);
#endif /* DEBUG */
}
Hat segfault nicht
void
database_1(char *host, char *action, char *message)
{
printf("Action: %s\n", action);
printf("Message: %s\n", message);
CLIENT *clnt;
rpc_args *result_1;
//struct rpc_args action_1_arg;
//rpc arguments struct to pass to server
struct rpc_args *args = malloc(sizeof(struct rpc_args));
char *id = generate_id();
#ifndef DEBUG
clnt = clnt_create (host, DATABASE, ASSIGNMENT_7, "udp");
if (clnt == NULL) {
clnt_pcreateerror (host);
exit (1);
}
#endif /* DEBUG */
result_1 = action_1(args, clnt);
if (result_1 == (rpc_args *) NULL) {
clnt_perror (clnt, "call failed");
}
#ifndef DEBUG
free(args);
clnt_destroy (clnt);
#endif /* DEBUG */
}
Können Sie 'struct rpc_args' anzeigen ?. Mitglieder "action" und "id" sind wahrscheinlich char Zeiger? Wenn ja, müssen Sie auch Speicher für jeden von ihnen reservieren. – Unimportant
@ user1320881 ja das ist genau das. – chrisd1100