c语言 内存问题-c语言新手,写了个简单程序,没问题啊,怎么就出现这种问题呢,求问

问题描述

c语言新手,写了个简单程序,没问题啊,怎么就出现这种问题呢,求问 1C

这是程序


这是输入的数据,3个人名


这是出现的异常,不懂是为什么啊?
有人给说说吗

解决方案

看着像是访问变量出问题了,你怎么不放代码放截图怎么看的清。最好放代码别人好调试

解决方案二:
楼主这种要存好几个字符串的,要么用二维数组,要么用指针数组

 #include<iostream>using namespace std;void main() {     int i;    char *name[4];  //创建指针数组,含有四个元素(每个元素都是一个char *指针)    printf(""学生姓名为:"");    for(i = 0; i < 4; i++)    {        name[i] = (char *)malloc(50 *sizeof(char));        scanf_s(""%s"" name[i] 50);    }    for(i = 0; i < 4; i++)    {        printf(""%s name[i]);    }    system(""pause"");} 

解决方案三:
scanf_s()第二个参数不对吧,应该是个指针,楼主 的name[i]只是name数组的第 i 个元素。

时间: 2024-11-03 11:00:53

c语言 内存问题-c语言新手,写了个简单程序,没问题啊,怎么就出现这种问题呢,求问的相关文章

求大神写个很简单程序!

问题描述 打开个某个件夹,里面有n个文件夹,每个文件夹里面有7个word,要将第6个word与第2个交换顺序,然后打印这7个word!谢谢大神. 解决方案 解决方案二:递归遍历将文件路径和文件名称一起保存出来至于说顺序,你要那种排序?名称?文件大小?文件创建日期?....解决方案三:就是不需要排序啊,只需要把第六个word和第二个调换一下位置啊.因为我要打印很多word而且要固定的装订顺序.比如我现在有个文件夹a,里面包含了n个文件夹,每个文件夹里面有几个word文件,调换刚才说的word顺序,

C语言内存对齐实例详解_C 语言

本文详细讲述了C语言程序设计中内存对其的概念与用法.分享给大家供大家参考之用.具体如下: 一.字节对齐基本概念 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐. 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同.一些平台对某些特定类型的数据只能从某些特定地址开始存取.比如有些架构的C

深入C语言内存区域分配(进程的各个段)详解

一般情况下,一个可执行二进制程序(更确切的说,在Linux操作系统下为一个进程单元,在UC/OSII中被称为任务)在存储(没有调入到内存运行)时拥有3个部分,分别是代码段(text).数据段(data)和BSS段.这3个部分一起组成了该可执行程序的文件   C语言可执行代码结构 名称 内容 代码段  可执行代码.字符串常量 数据段  已初始化全局变量.已初始化全局静态变量.局部静态变量.常量数据 BSS段  未初始化全局变量,未初始化全局静态变量 栈  局部变量.函数参数 堆  动态内存分配 (

设备驱动程序-请问C语言可以完全代替汇编去写驱动之类底层的东西吗?

问题描述 请问C语言可以完全代替汇编去写驱动之类底层的东西吗? 请问C语言可以完全代替汇编去写驱动之类底层的东西吗?还是说汇编无论如何都不可能被取代呢? 解决方案 与硬件交流越直接,代码的执行效率一般越高,汇编可以直接操纵CPU的寄存器,内存地址,硬件操作,但是编写效率比较低,C语言和汇编离得很近,一般都是采用c来加速开发,有些地方c实现达不到理想效果,于是就穿插汇编代码....另外弄清楚一件事,语言没有替代不替代的,只能说某种语言不再流行了,各种语言都有自己擅长的领域,在合适的领域选择合适的语

printf-c语言的一道题 动态规划 新手,求大神看看我代码的问题

问题描述 c语言的一道题 动态规划 新手,求大神看看我代码的问题 描述 7 3 8 8 1 0 2 7 4 4 4 5 6 2 5 (图1) 图1显示了一个三角形数. 编写一个程序,计算最高金额的数字传递路线,从顶部开始和结束的地方固定在底座上. 每一步可以走斜向下向左或向右斜下. 输入 程序从标准输入读取. 第一行包含一个整数N:三角形的行数. 以下N行描述三角形的数据. 在三角形的行数> 1但< = 100. 三角形的数量,所有的整数,在0到99之间. 输出 你的程序是编写到标准输出. 最

c语言-C语言写的倒序小程序,麻烦大家看看

问题描述 C语言写的倒序小程序,麻烦大家看看 #include #include void reverse(int p,int *q) { int j=0,i=0,N=8,k=N/2; for(;j<=N-1;j++) //雷德算法 { *(p+j)=(q+i); while(k<=i) { i=i-k; k=k/2; } i=i+k; k=N/2; } } int main() { int a[]={1,2,3,4,5,6,7,8}; int b,*c,i; b=a; c=(int)mall

C语言内存分配管理常见bug

标准C库提供了4个内存管理函数:malloc.calloc.realloc和free. bug1 调用free释放p指向的内存块之后,p就是一个悬挂指针--指向逻辑上不存在的内存的指针.如果引用这个悬挂指针,会导致不可预见的错误. ElemType* p = (ElemType*)malloc(sizeof(ElemType) * NUM); ... free(p);// p = NULL; ... *p = "..."; bug2 释放空闲内存,破坏内存管理函数所用的数据结构. El

c语言-C语言内存分配malloc导致的程序退出

问题描述 C语言内存分配malloc导致的程序退出 char *p; while (1) { p = malloc(1); *p = 0; } 这样写最后是因为没有内存退出还是向0写入退出?怎么感觉是内存完了 解决方案 内存分配失败就会返回空指针 解决方案二: 堆内存被使用完后,在申请就睡失败,p就是NULL,即地址为0写入,而这个地址是受程序保护的,无法写入因此退出 解决方案三: 个人觉得你这个应该是会导致堆内存不够,导致程序异常退出

int-C语言内存管理问题,要注重细节

问题描述 C语言内存管理问题,要注重细节 int pOld = (int) malloc( sizeof(int) ); int pNew = (int) malloc( sizeof(int) ); pOld=pNew; free(pOld); 这样写代码,有什么问题? 解决方案 代码顺序需要调整一下,pOld在赋值成pNew之前就必须free掉,不然第一次malloc出来的内存块就没有任何指针指向它了,也就是说我们失去了回收它的途径,所以正确的代码应该像下面这样: int pOld = (i