【发布时间】:2011-10-05 04:47:11
【问题描述】:
所以我在我的程序中使用 malloc,然后在程序内部的方法中重新分配。在我多次调用此方法后,我会收到“分段错误(核心转储)”。
经过进一步检查,我意识到由于某种原因,例如,当我的指针从 0x25d7d60 或 0x223fae0(或由 7 位 (0xHHHHHHH) 表示的任何地址)变为 0x7f47d370a010(超过 7 位)时,会从内部引发段错误realloc 调用,realloc 甚至不会返回 NULL。我通过简单地使用 malloc 然后 memcpy 解决了这个问题。但是,我对为什么会发生这种情况感到非常困惑,并想看看是否有任何 stackoverflow 用户可以解释为什么会发生这种情况。
谢谢
以下是相关代码:
unsigned int* myArray;
unsigned int num_ints;
int main()
{
num_ints = 100;
if((myArray =(unsigned int*) malloc(sizeof(unsigned int)*(num_ints)*3))==NULL)
{
std::cout << "Malloc failed!" << std::endl;
return false;
}
.
.
.
//This called when n key is pressed (code left out)
methodName();
return true;
}
void methodName()
{
if((myArray =(unsigned int*) realloc(myArray,sizeof(unsigned int)*(num_ints*4)*3))==NULL)
{
std::cout << "Realloc failed!" << std::endl;
exit(0);
}
}
【问题讨论】:
-
应该是C还是C++???为什么它被标记为 C 却使用
std::cout? -
它是 C++,我只是标记了 C,因为 realloc 在 C 中使用,我根本不使用 C++ 函数,但需要使用 g++ 编译。
-
@Matt:不要在 C++ 中使用 malloc、realloc 或 free。
-
投票结束,因为问题不在发布的代码中。