指针返回垃圾值

时间:2017-11-05 12:04:40

标签: c pointers

我不知道我做错了什么我在过去的两个小时里坚持这个。任何帮助都将受到高度赞赏。

我的代码如下: -

#include <stdio.h>
int* findLargest(int* arr,int size){
    return &arr[size-1];
}

int main(){

    int size=3;
    int arr[3]={3,4,5};

    int* largest=&arr[size-1];
    int* largest2=malloc(100);
    largest2=findLargest(*arr,size);
    printf("%d",largest);
    printf("%d",*largest2);
}

执行时我得到一个垃圾值。

4 个答案:

答案 0 :(得分:3)

只将arr传递给findLargest,这已经是一个指针

largest2=findLargest(arr,size);

printf内容最大,而不是指针本身

printf("%d\n", *largest);

另外,我不确定为什么你有这条线:

int* largest2=malloc(100);

当你再次分配给large2时,malloc指针会在下一行中立即丢失。

我还会考虑像这样分配size

int size = sizeof(arr)/sizeof(arr[0]);

如果您将来更改arr的内容,这会更安全。

所有这些变化主要看起来像:

int main()
{
    int arr[3]={3,4,5};
    size_t size = sizeof(arr)/sizeof(arr[0]);

    int* largest=&arr[size-1];
    int* largest2=findLargest(arr,size); // Only pass array to findLargest, this is already a pointer
    printf("%d\n", *largest); // printf contents of largest, not the pointer
    printf("%d\n", *largest2);
}

答案 1 :(得分:1)

这里的问题是这一行

printf("%d",largest);

您没有取消引用指针的位置。在价值导致更多混乱之后,也没有空格或新线。

答案 2 :(得分:0)

你不能编辑指针的地址,你要编辑指针的值 像这样:

int * v = malloc(sizeof(int)); //WRONG
int n=54;
v=&n;

int * v = malloc(sizeof(int)); //CORRECT
int n=54;
*v=n;

答案 3 :(得分:-2)

嗯,问题很简单。万一有人遇到这种混乱,这可能有所帮助。

正确的代码是:

std::bind