在堆区开辟的数组太大

利用动态规划法求最大值,我用malloc函数动态创建规划表,当输入总预算小于等于8位数时都没问题,当输入9位数时就报错了。
我猜可能是因为数据太大数组放不下了?
还是什么原因,怎么解决哇

img

malloc的代码在哪呢
看起来像是访问越界了,malloc里是不是忘记乘以sizeof(int)

  • 你可以看下这个问题的回答https://ask.csdn.net/questions/7805706
  • 除此之外, 这篇博客: 全面学习C语言【四】:指针(指针变量、指针运算符、指针数组、指针运算)、malloc动态内存分配中的 🚩访问指针地址上的变量 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 若要访问 也很简单 只需要使用星号即可

    当然 星号若作为双目运算符 那么是乘的意思
    作为单目运算符 用于访问指针的值所表示的地址上的变量

    #include <stdio.h>
    
    void f(int *p);
    
    int main()
    {
    	int i=123;
    	printf("%p\n",&i); // 0061FECC
    	f(&i);
    	
    	return 0;
    }
    
    void f(int *p)
    {
    	printf("%p\n",p); // 0061FECC
    	printf("%d",*p); // 123
    }
    

    *n可以作为右值也可以作为左值
    比如:

    int i=*p;
    
    *p=i+2;
    

    可以直接通过指针来很方便地直接改变指针所指向的变量的值:

    #include <stdio.h>
    
    void f1(int *p);
    void f2(int *p);
    
    int main()
    {
    	int i=123;
    	printf("%p\n",&i); // 0061FECC
    	f1(&i);
    	f2(&i);
    	
    	return 0;
    }
    
    void f1(int *p)
    {
    	printf("%p\n",p); // 0061FECC
    	printf("%d\n",*p); // 123
    	
    	// 修改指针指向的位置的值 
    	*p=321;
    }
    
    void f2(int *p)
    {
    	printf("%p\n",p); // 0061FECC
    	printf("%d",*p); // 321
    }
    

    左值 之所以被称为左值 就是因为在赋值号=左边的并不是变量 而是一个实实在在的值 是表达式计算后的结果 是特殊的值

    i[0]=123;
    *p=123;