【发布时间】:2016-01-25 00:43:54
【问题描述】:
所以,我在 C 中编写了一个简单的切片函数,它接受一个字符串数组、标记切片开始的字符串以及切片的大小。在函数中我 malloc 一个新数组,然后继续将切片中的每个字符串复制到新数组。然而,我在第一个 strcpy 上得到了一个段错误,即使我已经为结果数组分配了空间。
代码如下所示:
char** slice(char** args, char* start, int size){
int i = 0;
// need to find start first
char* cursor = args[0];
int j = 0;
while(cursor != NULL){
if(strcmp(cursor, start) == 0){
break;
}
j++;
cursor = args[j];
}
char** result = malloc(MAX_INPUT * size);
while(i < size){
strcpy(result[i], args[j+i]);
i++;
}
return result;
}
导致段错误的行是--
strcpy(result[i], args[j+i]);
我使用 gdb 来查看结果和 args 中的值, result[i] 是 0x0,它是 NULL,但结果本身是一个地址,但我不确定为什么 malloc 不起作用。我的堆栈空间用完了吗?这是否意味着我被搞砸了?
【问题讨论】:
-
这是一个关于运行时问题的问题,因此发布的代码必须干净地编译,并在运行时显示问题。发布的代码缺少#include 头文件语句,并且没有函数 I.E. 的驱动程序。没有 main() 函数,没有 'args[]' 参数内容的描述,也没有示例输入。由于问题似乎与“argss []”参数有关,因此需要发布设置该参数的代码
-
贴出的代码无法检查 (!=NULL) 返回值,那么你怎么知道 malloc() 失败了?
-
MAX_INPUT 的#define 是什么? 'size' 与 'args[]' 参数有何关系?
标签: c arrays segmentation-fault malloc strcpy