【发布时间】:2013-02-13 02:14:21
【问题描述】:
我试图通过从管道中读取字符然后将它们放入结果字符串来实现合并。我不断收到分段错误,并且无法调试问题的根源。当我删除对该函数的调用时,问题就消失了,所以我觉得这里有些地方不正确:
MAX_LENGTH 设置为 1024,我只对大约 30 个字符进行排序,所以我相信我应该有多余的空间。
int merge(char *result, int *leftpipefd, int *rightpipefd) {
char left[MAX_LENGTH/2];
char right[MAX_LENGTH/2];
int leftpos = 0;
int rightpos = 0;
int resultpos = 0;
read(leftpipefd[READ_END], left, MAX_LENGTH/2);
read(rightpipefd[READ_END], right, MAX_LENGTH/2);
int leftlen = strlen(left);
int rightlen = strlen(right);
while (leftpos < leftlen || rightpos < rightlen) {
if (leftpos < leftlen && rightpos < rightlen) {
if (left[leftpos] <= right[rightpos]) {
result[resultpos] = left[leftpos];
resultpos++;
leftpos++;
} else {
result[resultpos] = right[rightpos];
resultpos++;
rightpos++;
}
} else if (leftpos < leftlen) {
result[resultpos] = right[rightpos];
resultpos++;
rightpos++;
} else if (rightpos < rightlen) {
result[resultpos] = left[leftpos];
resultpos++;
leftpos++;
}
}
return EXIT_SUCCESS;
}
谁能看出我做错了什么?
【问题讨论】:
-
尝试使用调试器。对 strlen() 的调用返回什么值?你的
left和right"strings" 是空终止的吗? -
最好的调试方法是什么?我的标准输入和标准输出在这个过程中连接到管道,所以我不知道如何打印。
-
@Deathcalibur “使用调试器。”调试器不仅仅意味着编写打印语句,它是一个实际的程序,例如gdb
-
@djechlin 阅读后使用 gdb 确实有帮助,谢谢!
标签: c pointers merge segmentation-fault pipe