【发布时间】:2016-06-18 19:36:48
【问题描述】:
我遇到了这段代码的分段错误,我一辈子都无法弄清楚原因。我对指针比较陌生,所以它可能是显而易见的。该代码应该从标准输入中获取两行整数并以交替方式打印出来。我还没有完成打印出交替数字的代码的最后一部分。
int main(){
char *str1 = NULL;
char *str2 = NULL;
size_t sz = 0;
int i;
int x;
char *rp1 = NULL;
char *rp2 = NULL;
getline(&str1, &sz, stdin);
getline(&str2, &sz, stdin);
char *result1;
result1 = malloc(sizeof(*str1));
char *result2;
result2 = malloc(sizeof(*str2));
for(i = 0; (x = sscanf(str1, "%s ", &result1[i])) > 0; i++){
if(x == EOF){
return 0;
}
if(!isdigit(result1[i])){
fprintf(stderr, "Error: invalid non-integer input\n");
return 1;
}
}
rp1 = malloc(i);
rp1 = result1;
for(i = 0; sscanf(str2, "%s ", &result2[i]) > 0; i++){
if(!isdigit(result2[i])){
fprintf(stderr, "Error: invalid non-integer input\n");
return 1;
}
}
rp2 = malloc(i);
rp2 = result2;
return 0;
}
当我运行 gdb 时,它说我在第 25 行遇到了分段错误,这是第一个 for 循环。
编辑:所以我已经修复了 for 循环之前的 malloc 函数中的一个问题,但我仍然遇到分段错误。
【问题讨论】:
-
在调试器下运行时,哪一行产生了段错误?
-
是的,抱歉,当您回复时,我添加了正确的内容。 gdb 说第 25 行,这是第一个 for 循环。
-
如果 str1 是一个指针,你为什么要 malloc 指针的大小?你不应该 malloc 它指向的大小吗?
-
你认为这是在做什么:
malloc(sizeof(str1));? -
'result1 = malloc(sizeof(str1));'不像你认为的那样做:(
标签: c pointers segmentation-fault