And*_*ech 3 c arrays pointers segmentation-fault
我有以下代码:
int takeEven(int *nums, int numelements, int *newlist) {
newlist = malloc(numelements * sizeof *newlist);
int i, found = 0;
for(i = 0; i < numelements; ++i, nums++) {
if (!(*nums % 2)) {
*(newlist++) = *nums;
found++;
}
}
newlist -= found;
printf("First number found %d\n", *newlist); // <= works correctly
return found;
}
int main()
{
int nums[] = {1,2,3,4,5};
int *evenNums;
int i;
int n = takeEven(nums, sizeof(nums) / sizeof(*nums), evenNums);
for (i = 0; i < n; ++i) {
printf("%d\n", *(evenNums++));
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
上面代码的输出:
-1
2088999640
2088857728
Run Code Online (Sandbox Code Playgroud)
如果我newlist在返回函数(printf("First number found %d\n", *newlist);)之前尝试打印指针的第一个元素,它会按预期工作,但为什么当我尝试从函数外部访问指针时,我从看似未拼写的地址中获取这些值?
您正在按值传递newList指针,因此您的函数不会修改它.你应该这样做.
int takeEven(int *nums, int numelements, int **newlist) {
*newlist = malloc(numelements * sizeof *newlist);
...
}
...
int n = takeEven(nums, sizeof(nums) / sizeof(*nums), &evenNums);
Run Code Online (Sandbox Code Playgroud)