【发布时间】:2012-03-19 11:43:23
【问题描述】:
每次我取消注释 l70-72 时,我的程序都会发生运行时错误。这不是我第一次遇到这个特殊问题。
我创建了一个指向对象数组的指针,将该指针发送到一个函数中,尝试在 main 中执行该函数中定义的命令并得到一个运行时错误,所有这些都是在使用堆的同时进行的。该指针或数组中的指针显然会发生某些事情。
当我使用以下任何一项调用manage_Rectangle_arr(string strCommand, Rectangle * *arr, short *siArrayL) 时会发生错误:“填充数组”、“获取区域”和“空内容”(显然最后两个本质上与“填充数组”相关,因为它们需要它首先被执行才能起作用)
void manage_Rectangle_arr(string, Rectangle * *, short*);
int main()
{
Rectangle * * arr;
short siArrayL=1;
manage_Rectangle_arr("make array", arr, &siArrayL);
manage_Rectangle_arr("fill array", arr, &siArrayL); //Problem here
manage_Rectangle_arr("get areas", arr, &siArrayL); //Problem here
manage_Rectangle_arr("empty contents", arr, &siArrayL); //Problem here
manage_Rectangle_arr("delete array", arr, &siArrayL);
}
void manage_Rectangle_arr(string strCommand, Rectangle * *arr, short *siArrayL)
{
if(strCommand=="make array")
arr = new Rectangle * [ *siArrayL];
if(strCommand=="fill array") //Problem here
for(short s=0; s< *siArrayL; ++s)
arr[s]= new Rectangle(1, 1);
if(strCommand=="get areas") //Problem here
for(short s=0; s< *siArrayL; ++s)
cout << arr[s]->getArea();
if(strCommand=="empty contents") //Problem here
for(short s=0; s< *siArrayL; ++s)
delete arr[s];
if(strCommand=="delete array")
delete [] arr;
}
//When I call manage_Rectangle_arr(string strCommand, Rectangle * *arr, short *siArrayL) with any of the following: "fill array", "get areas" and "empty contents" (obviously the last two are related to "fill array" in nature, since they need it to be executed first in order to function)
【问题讨论】:
-
如果您将演示问题的最少代码编辑到问题中,那么这个问题可以迁移到 Stack Overflow。在目前的状态下,我不会让它被迁移。
-
你没有抓住重点。将代码包含在问题中,而不是作为外部网站的链接。
-
我测试了你的代码。使用 Visual Studio 2010 时,代码会在
delete未注释的情况下崩溃。这是因为您尝试删除未分配的内存区域。 -
因为你已经添加了代码,我觉得现在迁移到 SO 已经足够好了。你应该在那里得到更好的答案。
标签: c++ function memory memory-management heap-memory