Я получаю сообщение об ошибке «Ошибка сегментации (сбрасывание ядра)» при запуске этой программы. Я новичок в программировании c, поэтому, вероятно, это что-то глупое, но я не могу понять это.Разделение сегментации (выделение ядра) выделение памяти?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
void swap(char *x, char *y){
char temp = *x;
*x=*y;
*y=temp;
}
char** getPermutations(char *string){
int length = strlen(string);
int startIndex = 0;
int endIndex = length - 1;
if(startIndex == endIndex){
printf("%s\n", string);
}else{
for(int j = startIndex; j<=endIndex; j++){
swap((string + startIndex),(string + j));
getPermutations(string);
swap((string+startIndex),(string+j));
}
}
}
int main(int argc, char *argv[]){
if(argc>2){
printf("\nToo Many arguments\n");
exit(0);
}else{
printf("%s",argv[1]);
char * str = malloc(strlen(argv[1]) + 1);
strcpy(str,argv[1]);
getPermutations(str);
}
}
не забудьте освободить выделенные данные в конце, используя 'свободный()' – Cherubim
при компиляции, всегда включайте все предупреждения, затем исправить эти предупреждения, которые выводятся компилятором. (для 'gcc', при минимальном использовании:' -Wall -Wextra -pedantic' Я также использую: '-Wconversion' std = gnu99') – user3629249
для удобства чтения и понимания: 1) отдельные блоки кода (для, если, else, while, do ... while, switch, case, default) через пустую строку 2) последовательно отступать код. никогда не используйте вкладки для отступов, так как каждый текстовый редактор/редактор имеет ширину табуляции/ширину табуляции, установленную для личных предпочтений. Предложите использовать 4 пробела для каждого уровня отступов, поскольку он достаточно широкий, чтобы быть видимым даже с шириной переменной ширины, и по-прежнему позволяет использовать многие уровни отступа на странице – user3629249