Я массив следующей структурыошибка сериализации в C
typedef struct PATH{
int server1;
int server2;
int weight;
}PATH;
Я сериализации его в строку, используя следующую функцию.
char* serialize(PATH** arr, int sz){
char* buffer = calloc(50, sizeof(int));
char* str = NULL;
for (int i = 0; i < sz ; ++i)
{
sprintf(str, "%d %d %d\n", arr[i]->server1, arr[i]->server2, arr[i]->weight);
strcat(buffer, str);
}
return buffer;
}
И затем попытка распечатать его в главном, используя следующие две строки кода.
char* msg = serialize(paths, vector->numEdges);
printf("%s\n", msg);
В результате я обнаружил ошибку сегментации.
несколько проблем с кодом: 1) 'str' указатель никогда не устанавливается, чтобы указать на какой-либо конкретной памяти, так что любая ссылка на' где str' точек неопределенное поведение и может привести к событию сбоя seg. 2) вызов 'sprintf()' не помещает байт завершения строки NUL в конец используемой части массива, поэтому 'strcat()' не знает, где остановить копирование символов. который является неопределенным поведением и может привести к событию сбоя seg. – user3629249
почему двойной указатель и т. Д. Для переданного параметра: 'arr', если' arr' не является указателем на массив указателей (опубликованный код и текст вопроса не делают эту информацию ясной.) – user3629249