Почему следующее работает, а не выбрасывает какую-то ошибку сегментации?
char *path = "/usr/bin/";
char *random = "012";
// path + random + \0
// so its malloc(13), but I get 16 bytes due to memory alignment (im on 32bit)
newPath = (char *) malloc(strlen(path) + strlen(random) + 1);
strcat(newPath, path);
strcat(newPath, "random");
// newPath is now: "/usr/bin/012\0" which makes 13 characters.
Однако, если я добавлю
strcat(newPath, "RANDOMBUNNIES");
не должен ли этот вызов произойти сбой, потому что strcat использует больше памяти, чем выделено? Следовательно, не должно
free(newPath)
также не удается, потому что он пытается освободить 16 байтов, но я использовал 26 байтов ("/ usr / bin / 012RANDOMBUNNIES \ 0")?
Большое спасибо заранее!