c – 小而奇怪
发布时间:2020-12-16 09:48:10 所属栏目:百科 来源:网络整理
导读:我对C内存概念不是很熟悉.我试图寻找解决方案,但找不到一个. 我只是想在C中创建动态数组.我试图以这种方式创建它,同时试图检查地址是否连续.程序运行正常. 但是,在语句系统(“暂停”)之后我遇到了分段错误.我也尝试使用调试器进行调试,没有运气!我正在使用D
我对C内存概念不是很熟悉.我试图寻找解决方案,但找不到一个.
我只是想在C中创建动态数组.我试图以这种方式创建它,同时试图检查地址是否连续.程序运行正常. 但是,在语句系统(“暂停”)之后我遇到了分段错误.我也尝试使用调试器进行调试,没有运气!我正在使用Dev CPP. 任何人都可以指导我吗? #include<stdio.h> #include<stdlib.h> main() { int a[0],*ptr,i; printf("%d",sizeof(a[0])); a[0]=1; for(i=1;i<10;i++) { ptr=(int *) malloc(sizeof(int)); printf("Enter a[%d]: ",i); a[i]= *ptr; scanf("%d",&a[i]); } i=0; while(i<10) {printf("n%u",&a[i++]);} free(ptr); system("pause"); } 解决方法
int a [0]
没有分配任何空间(其宽度为0) 然而你在这一行写到: 一个[0] = 1; 你还假设它有10个元素: while(i<10) {printf("n%u",&a[i++]);} free(ptr); 实际上,因为这只是堆栈内存,所以你只需要写入堆栈的另一部分.例如,你可以覆盖ptr的值.通常这可能会被检测到,直到堆栈被解开并且其中一部分明显被破坏.在主系统返回时,堆栈在系统(“暂停”)之后立即展开. (另外,如果ptr被你的写入覆盖,你不能确定free是否合理.) 要分配10个整数数组,请使用以下语法: int a[10]; 然后你可以使用[0]到[9].但是当你尝试读/写[10]时,这是C不要指望任何保护你的东西. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |