なぜ次のことが機能し、ある種のセグメンテーション違反をスローしないのですか?
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")を使用しましたか?
よろしくお願いします!