¿Por qué recibo un error de tiempo de ejecución SIGSEV en este código?

El código es muy largo y sin tener casos de prueba no puedo decirte exactamente dónde es tu culpa, pero déjame darte una pista.
¡SIGSEV significa fallo de segmento!
Significa que su código está intentando acceder a esa parte de la memoria que no está permitida.
Entonces, comencemos a depurar
Solo tiene una forma de leer y escribir en la memoria insegura que es la matriz. Entonces esa es la única razón para obtener un SIGSEV
Matriz ‘b’ no estática y tamaño 100000 * 4 bytes
Vamos con eso uno por uno,
primer acceso, bucle 1
está accediendo desde el índice 0, por lo tanto, ese no es el problema … Verifiquemos el límite superior.
(j*(j+1))<=2*s //this is your upper bound
Hablemos en el peor de los casos, su código dentro del bucle es
b[j-1]
el límite máximo disponible de j es 100000 – 1 = 99999
entonces, el código debe terminar en esto, por lo tanto 99999 * (99999 + 1) == 2 * s
por lo tanto s debe ser menor o igual a 4999950000
¿Es correcto según las restricciones?
Asumamos que es correcto,
El siguiente acceso a la matriz está aquí

para (k = j; k <n; ++ k)
b [k] = a;

Entonces, esto dice que la matriz debe ser mayor o igual que la longitud ‘n’, ¿es así?
Tercer acceso
b[n-1]+=d;
Hmm, ¿y si n = 0? apuntará a -1, ¿está bien? ¿Puede ‘n’ ser cero? Retirar las restricciones del problema nuevamente.