关于C语言中动态分配问题

有程序实现对零件的:插入,更新数量,输入价格,输入数量等功能
现要求修改结构数组,从之前的提前确定数组长度,改为malloc动态分配,并在数组满了之后,用realloc增加分配的内存。
为了便于测试,我先为数组分配了1倍于struct part的内存如下:
int max_parts==1;
strcut part *inventory;
inventory=malloc(max_parts*sizeof(struct part));
我理解的是,如果我输入一个零件的信息(编号名字数量价格等)后,此次动态分配的地址就会被填满。事实却不是这样,当我输入两个零件的信息的时候,仍旧正常显示,第三个零件后,才出现问题:零件名和编号是正确显示的,而数量这一项是一个超大的值。价格是0.00。图片说明

0

4个回答

如果要细致分析你程序的表现,你目前提供的信息不够,要贴上完整的程序,才能找到写入数据的区域怎样被更新了.

0

你数组越界了,数组越界不一定立刻就会出错,因为内存后面的空间未必分配给别的变量了。

1

你申请的空间是一个没错,不知道你是怎么判断它已经满了。
还有你要明白虽然你是只申请了一个,但也不表示你越界后无法正常使用,只是会有可能出现错误。
最后如果你是做结构存储,最好用list之类的,现在已经很少有人去自己用这个来分配内存什么的。

0

因为你申请了一倍于结构的数组 所有第三个才出现错误,数组越界的错误都是随机的,不可控制。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
在严蔚敏《数据结构(C语言版)》中,不能用动态分配的一维数组来实现循环队列
近期查看严蔚敏的《数据结构(C语言版)》,里面有这样一句话:从上述分析可见,在C语言中不能用动态分配的一维数组来实现循环队列。网上也有不少网友询问这句话的意思及对错,先谈一下自己的认识。 动态分配的存储空间是连续的存储空间,假如分配了n个存储空间(分别问0,1,...,n-1),第n-1个存储空间的地址肯定大于第0个存储空间的地址。当所有的空间都存储满时,继续存储元素就会发生数组越界,出现错误。
【C语言】动态内存分配
C 语言中的一切操作都是基于内存的。这是我们在学习C语言的前提!所以,在有些时候程序运行的过程中,可能需要使用一些额外的内存空间。 我们现在所用的主要是malloc、free、calloc、realloc!
C语言中的动态内存分配
为什么使用动态内存分配?  C语言中的一切操作都是基于内存的  变量和数组都是内存的别名,如何分配这些内存由编译器在编译期间决定  定义数组的时候必须指定数组长度  而数组长度是在编译期就必须决定的 需求: 程序运行的过程中,可能需要使用一些额外的内存空间。 malloc和free  malloc和free用于执行动态内存分配和释放  malloc所分配的是一块连续的内存,以字节为单...
C语言如何动态分配空间:malloc
一般的变量在定义是就要确定大小,但是有的时候不知道用户的需要,就比如说排序,你不知道用户想要给几个数排序,所以为了保险起见往往是定义一个很大的变量,而实际上用户可能只需要给5个数排序,你却int k[1024];来存放要排序的数,造成极大的浪费。这里介绍一个函数用于动态分配空间:malloc 如何使用malloc 原型 extern void *malloc(unsigned int num_by...
【C语言练习题】动态分配内存
《C和指针》练习题11.11
c语言动态分配内存相关的几种函数总结
笔者为C语言新手,想分享并总结下相关学习心得,如有错误,望各位大牛指正。Malloc:原型:void *malloc(int byte_size);作用:动态开辟byte_size个字节的内存空间,不进行初始化,返回指向此内存的指针,此指针所指数据类型没有确定,需要强转。举例:int *p=(int *)malloc(5*sizeof(int));例解:动态开辟5*4=20个字节大小的空间,返回空...
关于C语言中进制问题以及简单的浅谈进制转化问题。
对于一般学习中,最常见的就是4种,二进制,八进制,十进制以及十六进制。在大一的C语言学习当中,学校粗略的说了一下这些,最后导致好多人无法流畅的进行进制之间的转化,以及使用。在大一接触单片机以后更加发进制之间转化的一些规律等,现在来谈一下。 1.关于十进制与二进制之间的转化。 在这四种进制当中,最常用的就是十进制了,从我们开始学数学开始,一直用的就是十进制。二进制,就是0和1,这是机器能够读懂的
C语言中一些基本问题
一、小白在学习过程中有时会在程序中看到0u或是0ul等常量有后缀的情况,如果没接触到C语言常量后缀的话可能就有点疑惑~ 其中的u为unsigned,l为long,f为float           C语言中常量的默情况:整形默认为有符号int;浮点型默认为double;如果整形常量大小超出int,默认自然就为long int;如果需要无符号整形常量的话就可以在常量后面加u或是U,如0u或是0U...
C语言动态分配多维数组
分析两种动态分配二位数组的方法,其原理一致。 0. 动态分配一维数组int a[rows] #include <stdlib.h> int main{void} { ... int *a = (int *)malloc(rows * sizeof(int));//分配一段内存,存放rows个int型的数据 ... } 1. 动态分配内容不一...
C语言中关于插入法排序的源代码
C语言中关于插入法排序的源代码; C语言中关于插入法排序的源代码。
C语言基础之动态内存分配(附代码演示)
C语言中的动态内存分配需要用到malloc和free两个函数。malloc和free 动态分配内存可以在程序运行的时候决定需要分配多少个存储区,为了使用动态分配内存需要使用一组标准函数malloc和free,为了使用这些标准函数需要包含stdlib.h头文件。 演示代码1: 该段代码主要是掩演示了如何使用malloc函数动态分配内存,然后用申请到的内存存储数据,使用完之后及时的销毁动态分配
简述C语言动态、静态内存分配
#include #include /** c语言静态内存分配 */ void func(int** address ) { //定义int类型的i变量,并赋值100 int i = 100; //把i对应的地址赋值给iPoint变量 *address = &i; } int main(int argc, char *argv[]) { //定义int类型的一级指针变量iPoin
C语言--动态分配内存空间的使用方法
  #include <stdio.h> #include <stdlib.h> int main() { int i; int *nums; //为指针分配动态的内存空间 // nums = (int *)malloc(sizeof(int)*5); 这个没有初始化 nums = calloc(5,sizeof(int)*...
c语言中的动态分配问题
我知道c中的malloc()是动态分配空间rn请问下下面这句话是什么意思:rnnewbase=(int*)[u]realloc[/u](L.a,L.listsize+LISTINCREMENT)*sizeof(int);rn主要不理解rnrealloc()是什么意思rnrnrn怎么用C++实现?rn我是菜鸟,谁能帮我。。。。
c语言动态分配空间
问题:typedef struct node{    int num;    struct node*next;}Node,*pNode在链表的create函数中,为什么定义了链表头之后,以后的每个空间都要new(c++中的用法)或者malloc?不能直接定义:Node p;pNode=&p;原因:虽然上述两行代码中也分配了空间,但是这种定义语句分配的空间是栈空间,而且有作用域的限制,不能...
C语言的内存动态分配函数malloc,calloc,free,realloc
前言 本博文基于VC++6.0开发调试 只是对这四个函数的一个总结; 什么是内存的动态分配 C语言中的全局变量和局部变量分别分配内存的栈中的静态存储区和动态存储区,关于静态存储区和静态存储区之前的博客也有介绍, ...
关于C语言中static和动态分配的问题
如下面的C语言: static int re[2]={0}; re[0]=1; re[1]=2; 不太明白第一句的含义。
C语言库函数C语言库函数
C语言中的库函数C语言中的库函数C语言中的库函数C语言中的库函数C语言中的库函数
C语言中字符串典型问题分析
--事物的难度远远低于对事物的恐惧!       这章我们主要来分析几个典型的字符串问题,也是面试中比较常见的题。     第一题、如下代码执行后输出什么? #include <stdio.h> #include <string.h> int main() { #define STR "Hello, \0World\0" char* sr...
C语言动态分配内存实例
      有些数组的长度只有在运行时才知道,所以就用到了动态分配内存,下面的程序就是来演示读取一列整数,并按升序进行排列,并打印出来。/* ** 读取,排序,打印一列整数值 */ #include <stdlib.h> #include <stdio.h> /* ** 该函数由‘qsort’调用,用于比较整型值(qsort快速排序函数) */ int compa...
C语言中你必须知道的100个问题
来自于《你必须知道的495个C语言问题》 经过了总结1-使用typedef定义新的类型名,int16和int32,再根据实际机器选择int, short, long标准头文件 inttypes.h 已经帮你定义了int16_t,uint32_t等等2- C99中 long long至少64位3- 存储类型 extern的作用?extern对数据声明才有意义,对函数声明仅仅是告诉你该函数的定义可能在
C语言中为指针的指针动态分配内存空间的做法
前言:本人在学习数据结构的过程中,遇到了散列这种数据结构,在使用分离链表发构建散列的过程中,需要用到为指针的指针动态分配内存空间,所以本人写了一个C语言的Demo程序来先测试这一行为问题如图#include "stdafx.h" //输出数组测试 void PrinT(int *p,int size){ for (size_t i = 0; i < size; i++) {
OC语言中类的三大特性及本质(一)
OC语言同C++,C#,java等其他面向对象语言一样,都有类的概念。其他语言通常以关键字class声明一个类,但是OC语言却是以@interface声明一个类。类的定义OC类声明以@interface开头,后面紧跟类名,以@end结束。声明如下:@interface classname //声明成员变量和方法 @endOC类实现以@implementation开头,后面紧跟类名,以@end结束。实
《数据结构》(C语言版)——线性表的动态分配顺序存储结构
//P21 线性表的 顺序表示和实现 //函数结果状态代码 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 //Status是函数的类型,其值是函数结果状态代码 typedef int Status; //用到的库文件 #include /
C语言中三目运算符的结合性问题
C语言中存在唯一的三目运算符
c语言基础(六)静态和动态内存分配
1.静态内存是程序编译执行后系统自动分配,由系统自动释放,静态内存是栈分配的 第一次执行完毕后i就被释放了,所以后面输出的为垃圾值 2.动态内存分配是开发者手动分配的,是堆分配的 malloc(int)函数申请内存空间 free()回收 realloc()重新分配
C语言中关于函数指针的用法
C语言中关于函数指针的用法。。。。。。。。。。。。。
C语言中指针的灵活运用
C语言中指针的灵活运用C语言中指针的灵活运用C语言中指针的灵活运用C语言中指针的灵活运用C语言中指针的灵活运用
C语言链表代码
关于c语言中链表的问题创建,排序,倒叙,创建有序,组合链表
c语言获得动态分配内存后的数组内存大小
c语言获得动态分配内存后的数组内存大小 用一个函数 :_msize(); ★注意:该函数为Windows独有★ int* s = (int*)malloc(sizeof(int));     int i;     for(i = 0;i &amp;lt; 1000;i++)     {         s = (int*)realloc(s,sizeof(int) * (i+1));        ...
C语言之动态内存分配与释放
一,堆内存 1,堆内存特点 堆内存可以存放任意类型的数据,但需要自己申请与释放。 2,堆大小 堆大小,想像中的无穷大,但实际使用中,受限于实际内存的大小和内存是否有连续性。 二,堆内存的申请与释放 1,malloc函数 函数声明:·void *malloc(size_t Size) 所在文件:stdlib.h 参数:size_t Size (Size表示要申请的字节...
浅谈c语言预处理知识
预处理是C语言的一个重要功能,由预处理程序负责完成。合理地使用这些预处理功能,将有利于程序的阅读、修改、调试和移植,也有利于程序的模块化设计。 c语言中提供的预处理功能包括宏定义、文件包含以及条件编译等。 1.宏定义 ①不带参数的宏定义:#define 宏名 字符串  (比如:#define PI 3.14159) 注:宏名一般使用大写字母,以便在程序中查找宏替换的位置。 ②带参数的宏定
C语言中动态分配二维数组
int *a[col] = (int *) malloc(col * sizeof(int));n这一句话为什么错了,为什么不能用指针数组动态分配二维数组?n是不是只能用int **a才能动态分配二维数组?
C语言中关于宏定义的一点总结
1、常见的宏定义语句有不带参数的宏定义和带参数的宏定义两种 2、带参数的宏定义,在比较复杂时,往往通过\字符进行换行分割,来使其更加清晰。 比如: #include &amp;lt;stdio.h&amp;gt; #include &amp;lt;string.h&amp;gt; #define FUNC(a, b) \ printf(&quot;The add of &quot;#a&quot; and &quot;#b&quot; is %d\n&quot;, ((a)+...
C语言中的二维数组问题
在《C和指针》Page157中讲到多维数组(例matrix[3][10])时,*(matrix+1)+5是一个指向matrix[1][6]的指针,等同于matrix[1]+5.而*(*(matrix+1)+5)就是matrix[1][6]. 在这里matrix表示一个指向若干整型元素数组的指针.      而《C陷阱与缺陷》的第三章-语义"陷阱",讲到指针与数组的关系时,作者提到"C语言只有一维
C语言中数据类型的使用选择
在《C专家编程》书中有这么一段话:        尽量不要使用无符号数,以避免增加不必要的复杂性。尤其是不要仅仅因为无符号不存在负值而用它来表述数量。        说到了上面的原则,书中给出了一个例子。这里给一段示范代码: #include"stdio.h"   int num = -1;   int main(void) {        printf("value afte
C语言中.h和.c文件解析 教程
C语言中.h和.c文件解析 C语言中.h和.c文件解析 C语言中.h和.c文件解析 C语言中.h和.c文件解析
好东西C语言中的指针常量
C语言中的指针常量C语言中的指针常量C语言中的指针常量
关于C语言中动态分配的一些问题
有程序实现对零件的:插入,更新数量,输入价格,输入数量等功能n现要求修改结构数组,从之前的提前确定数组长度,改为malloc动态分配,并在数组满了之后,用realloc增加分配的内存。n为了便于测试,我先为数组分配了1倍于struct part的内存如下:nint max_parts==1;nstrcut part *inventory;ninventory=malloc(max_parts*sizeof(struct part));n我理解的是,如果我输入一个零件的信息(编号名字数量价格等)后,此次动态分配的地址就会被填满。事实却不是这样,当我输入两个零件的信息的时候,仍旧正常显示,第三个零件后,才出现问题:零件名和编号是正确显示的,而数量这一项是一个超大的值。价格是0.00。n![图片说明](https://img-ask.csdn.net/upload/201804/29/1524991820_329051.png)n第二个问题,我看了答案,答案用inventory==NULL;来判断动态分配是否填满。这个我不理解,inventory永远都指向一块空间,并且没有对它的其他操作,即使满了,也是指向非NULL的空间,怎么会==NULL呢?是哪一步操作让它“哪里都不指向”的?
C语言中的指针C语言中的指针C语言中的指针
C语言中的指针C语言中的指针C语言中的指针
相关热词 c#异步发送kafka c#窗体编号 c# 操作二进制文件 c# 反射 机制 c#线程 窗体失去响应 c#角度转弧度 c# 解析gps数据 c# vs设置 语法版本 c# json含回车 c#多线程demo

相似问题

3
C语言怎么给结构体成员动态分配内存?
2
C语言新手,想请教大佬们一个关于在函数内(不是主函数)分配内存的问题
1
C语言实现strcat的问题
0
谢谢,用C语言解决一个资源分配的问题,采用数据结构,xiexie
1
QT在主窗口中动态分配的子对话框不用show不显示,而使用静态函数不用show也显示,为什么?
0
动态的内存的分配在这个计算上的运用,怎么求坐标点的位置,采用C语言
0
最大最小间隔的匹配,多行数据输入动态数组分配,怎么利用的C语言实现的
0
重量分配矩阵的数学运算,采用C语言实现关于数据结构的算法
1
这个时间段分配的数据结构问题,怎么利用C编程语言的方式解答?采用C语言
2
c语言,是谁为变量分配相应的存储空间?操作系统还是编译系统?
0
C语言动态链表分配方式计算这个问题的答,运用C语言编程的知识
0
数字分配到集合里面的问题,问有哪些分配方式,采用C语言
0
关于堆栈知识点的运用,如何解决这个序列出入分配,采用C语言的实现
0
动态节点的分配如何优化这个的算法, 采用C语言编程的方法实现
0
图案的拼接分配的一个算法问题的解决,如何利用C语言编程实现这个算法
0
函数分段分配的一个算法的问题,数据结构里使用C语言解决
1
关于c语言读取文件信息到链表,怎么操作?
0
比赛场次的划分,使得差距最小的分配算法,采用C语言的程序设计技术
0
可编码的数据的重新分配N的算法,采用C语言的程序设计语言的编写
1
C++对象指针分配空间问题