小编Sau*_*dhi的帖子

堆栈上的动态内存分配

我最近尝试过这个实验,其中我没有为未知大小的内存需求进行动态内存分配,而是进行了静态分配.当a[i]我声明一个数组时,我保持i(数组的大小)变量并且依赖于用户给出的输入.

 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <conio.h>
 void function(int );
 int main(void)
 {
     int i;
     printf("Enter:");
     scanf("%d",&i);
     function(i);
     printf("i = %d\n",i);
     getch();
     return 0;
 }
 void function(int i)
 {
      char a[i];
      char b[4];
      strncpy(a,"hello",i);
      strcpy(b,"world");
      int j = 0;
      char *c = a;
      for( j = 0; j< 20; j++ )
           printf("%c",*c++);
 }
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 这样的手术合法吗?
  • 如果不是,为什么编译器不发出任何警告或错误?
  • 这个内存将在哪里分配:堆栈还是堆?
  • 为什么ANSI C/GCC允许这样做?

c memory gcc dynamic c89

5
推荐指数
3
解决办法
1万
查看次数

标签 统计

c ×1

c89 ×1

dynamic ×1

gcc ×1

memory ×1