当前不会命中断点,没有与此行关联的调试程序的目标代码类型的可执行代码。

img


不晓得为嘛右移不行啊,求解。


#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>

int* countBits(int n)
{
    int arr[] = {0};
    for (int i = 0; i <= n; i++)
    {
        int j = i;
        int val = 0;
        for (;j; )
        {
            if (j & 1)
            {
                val++;
            }
            j >> 1;
        }
        arr[i] = val;
    }
    int* p = arr;
    return p;
}

int main()
{
    int n = 0;
    printf("请输入n的值:");
    scanf("%d", &n);
    int* arr = countBits(n);
    for (int i = 0; i <= n; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

改成j=j>>1;就可以了,但是函数出了另一个新问题,main中接受到子函数传参时数组arr内值都是对的,循环打印arr,i=0;的时候,arr[0]是对的,当arr[0]输出完后,arr[1]值跳变成其他的值了

函数功能,给定一个整数 n, 返回一个大小为 n+1 的 result 数组,其中 result[i] 是 i 的二进制表示中位为 1 的个数 (0 <= i <= n)。

详细过程如下图:
i=0时:

img


i=1时:

img


i=2时:

img

懵逼了,求大佬扶一下。

=========================================更新============================================

由于数组定义在栈上,故在子函数调用完毕后释放了;此时修改为malloc申请的空间,在主函数中接收使用后主动释放;