Closed. This question is off-topic。它当前不接受答案。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
当我使用添加功能输入数据时,我可以毫无问题地打印它们。为开始(x,y),结束(x,y)添加一个值,并且我能够打印值。但是,当我指定要在输入第一组起始值和结束值后函数离开时需要两个numGraphicElements时。第二次遍历循环时,它将覆盖我以前的值。
当我打印值时,由于某种原因,它会用随机数覆盖我的第一个值,然后仅显示第二组start(x,y)end(x,y)值。
第一组的示例:start(1,2)end(3,4)....此打印正确
添加第二组的示例:start(9,8)end(6,7)...也将打印
示例pf一起打印出2套x(23424),y(653243),end = x(2334)y(33434)..... x(9)y(8)结束x(3)y(4 )。
该代码恰好分配了一个线对象。
在这里,它似乎只解决了
这样做代码会调用未定义的行为,此刻可能会发生任何事情。这包括覆盖属于同一进程的其他内存。
想改善这个问题吗? Update the question,所以它是on-topic,用于堆栈溢出。
3年前关闭。
当我使用添加功能输入数据时,我可以毫无问题地打印它们。为开始(x,y),结束(x,y)添加一个值,并且我能够打印值。但是,当我指定要在输入第一组起始值和结束值后函数离开时需要两个numGraphicElements时。第二次遍历循环时,它将覆盖我以前的值。
当我打印值时,由于某种原因,它会用随机数覆盖我的第一个值,然后仅显示第二组start(x,y)end(x,y)值。
第一组的示例:start(1,2)end(3,4)....此打印正确
添加第二组的示例:start(9,8)end(6,7)...也将打印
示例pf一起打印出2套x(23424),y(653243),end = x(2334)y(33434)..... x(9)y(8)结束x(3)y(4 )。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <crtdbg.h>
#define _CRTDBG_MAP_ALLOC
enum
{
RUNNING = 1
};
struct Point
{
int x, y;
};
struct Line
{
Point start;
Point end;
};
struct GraphicElement
{
enum
{
SIZE = 256
};
unsigned int numLines; //number of lines
Line* pLines; //plines points to start and end
char name[SIZE];
};
typedef struct
{
unsigned int numGraphicElements;
GraphicElement* pElements; //the head points to pLines
} VectorGraphic;
void InitVectorGraphic(VectorGraphic*);
void AddGraphicElement(VectorGraphic*);
void ReportVectorGraphic(VectorGraphic*);
VectorGraphic Image;
int main()
{
char response;
InitVectorGraphic(&Image);
//for debugging purposes
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
//main menu for the program
while (RUNNING)
{
printf("\nPlease select an option:\n");
printf("1. Add a Graphic Element\n");
printf("2. List the Graphic Elements\n");
printf("q. Quit\n");
printf("CHOICE: ");
fflush(stdin);
scanf("%c", &response);
switch (response)
{
case '1':
AddGraphicElement(&Image);
break;
case '2':
ReportVectorGraphic(&Image);
break;
case 'q':
CleanUpVectorGraphic(&Image);
return 0;
default:
printf("Please enter a valid option\n");
}
printf("\n");
}
}
/*initialize the vectors, allocate memory*/
void InitVectorGraphic(VectorGraphic * pImage)
{ //addres of pImage is passed in
struct GraphicElement *pElements;
pImage->pElements = (GraphicElement*) malloc(sizeof(GraphicElement)); //pImage is now the addess of image
pElements = (GraphicElement*) malloc(sizeof(GraphicElement));
pImage->numGraphicElements = 8;
pImage->pElements = NULL;
}
最佳答案
这里
line = (struct Line *) malloc(sizeof(Line));
该代码恰好分配了一个线对象。
在这里,它似乎只解决了
line[0]
问题:line[pImage->numGraphicElements]....
这样做代码会调用未定义的行为,此刻可能会发生任何事情。这包括覆盖属于同一进程的其他内存。
关于c++ - 函数保持覆盖先前的结构数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39678813/
10-15 06:14