一个很诡异的问题

fx397993401 2009-08-30 11:32:50


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

int main()
{
char* str;
str = (char*)malloc(5001*sizeof(char));//这两句直接报错
//char str[5000] 也是 为什么 很诡异 2008 6。0 codeblock 都是 报错
int data[5005][5005] = {0},len;
long max = 0,i ,j;

scanf("%d%s",&len,str);
//len = strlen(str1);


return 0;
}
...全文
95 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
liguiman 2009-08-31
  • 打赏
  • 举报
回复
在函数内部的变量是临时变量, 运行时在堆栈(stack)上分配,stack一般很小。
malloc函数调用则是在堆(heap)上动态分配的。
如果你用汇编,就更清楚区别了
hixi2007 2009-08-31
  • 打赏
  • 举报
回复
同意:
编译错误?C禁止在可执行语句后定义变量,因此你在malloc后定义max,data等肯定是非法的(除非你文件名是cpp)

第二个错误,data变量太大了,堆栈只有1M空间而5005*5005*4显然大于1M了,在编程中要尽量避免定义大变量
bfhtian 2009-08-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 arong1234 的回复:]
编译错误?C禁止在可执行语句后定义变量,因此你在malloc后定义max,data等肯定是非法的(除非你文件名是cpp)

第二个错误,data变量太大了,堆栈只有1M空间而5005*5005*4显然大于1M了,在编程中要尽量避免定义大变量
[/Quote]
可以在{}内定义变量
mstlq 2009-08-30
  • 打赏
  • 举报
回复
int data[5005][5005]数组需要的内存超过25m了,而默认的栈大小只有1m,分配不了足够空间,于是发生栈溢出错误……

大数组建议定义成全局变量,malloc更好……
arong1234 2009-08-30
  • 打赏
  • 举报
回复
编译错误?C禁止在可执行语句后定义变量,因此你在malloc后定义max,data等肯定是非法的(除非你文件名是cpp)

第二个错误,data变量太大了,堆栈只有1M空间而5005*5005*4显然大于1M了,在编程中要尽量避免定义大变量
mstlq 2009-08-30
  • 打赏
  • 举报
回复
不报错的版本

#include<stdio.h>
#include<stdlib.h>
int data[5005][5005] = {0};
int main()
{
char* str;
str = (char*)malloc(5001*sizeof(char));
int len;
long max = 0,i ,j;
scanf("%d%s",&len,str);
return 0;
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧