我正在尝试使用malloc将内存分配给我的int指针。我遇到了分段错误,当我尝试使用gdb进行调试时,我得到了这个输出:
编程接收信号SIGSEGV,分段故障。 malloc.c中的__GI___libc_realloc(oldmem = 0x7fffffffdfd0,bytes = 1)中的0x00007ffff7a97f90:3015 3015 malloc.c:没有这样的文件或目录。
代码如下:
int stringAllocation(char **destination){
char c=1, *temp;
int ctr=0;
int num_of_char=0;
while(c!='\n'){
c=getc(stdin);
num_of_char+=1;
temp=realloc(*destination, sizeof(char)*num_of_char);
if(temp)
*destination=temp;
else{
printf("String allocation failure.");
return -1;
}
*(*destination+ctr)=c;
ctr++;
}
if((*destination)[ctr-1]=='\n')
(*destination)[ctr-1]='\0';
}
main(void){
char *temp_course;
int temp_sem;
int temp_acad_year;
int valid=0;
char dummy;
int ctr;
while(valid==0){
dummy=0;
while(dummy!='\n')
dummy=getc(stdin);
printf("\nGetting course!\n");
printf("\nCourse code: ");
stringAllocation(&temp_course);
printf("Semester: ");
scanf("%d", &temp_sem);
if(temp_sem<1||temp_sem>3){
valid=0;
continue;
}
else
valid=1;
printf("Academic year: ");
scanf("%d", &temp_acad_year);
if(temp_acad_year<1908||temp_acad_year>2015){
valid=0;
continue;
}
else
valid=1
}
int numstud;
int *studnum;
valid=0;
while(valid==0){
printf("Input number of students: ");
scanf("%d", &numstud);
if(numstud>=5&&numstud<=15)
valid=1;
}
studnum=(int*)calloc(numstud,sizeof(int));
}
}
答案 0 :(得分:0)
temp_course未初始化。因此,当在重新分配的调用中使用其现有值时,您的代码会崩溃。将其初始化为NULL。