【发布时间】:2012-02-04 09:42:17
【问题描述】:
我想知道是否有人对此有任何见解......
我的程序在这个调用上崩溃了:
void subtract(data* array,data* inverse,int a, int b, int q, int n)
{
data* arraytomultiply;
arraytomultiply = (data *)malloc(sizeof(data*) * n);
其中 data 只包含一个 int (这是为了以后切换类型时方便)
typedef struct {
int value;
}data;
我在这里尝试了很多改变指针的方法,因为我对它们一点信心都没有,但无济于事。
奇怪的是,在程序的早期,这个相同的调用起作用了,我给它赋值并可以打印出来,一切都......:
data* array;
array = (data*)malloc(sizeof(data*) * m * n); // m * n entries
可能有用的一件事(虽然我不知道为什么)是它在早期工作时是在一个 void 函数期间,而当它崩溃时它是在一个从算法中调用的函数中。但我根本看不出这会如何影响它,因为我想要做的不是使用任何参数等......
有什么想法吗?
【问题讨论】:
-
当
malloc崩溃时,几乎总是因为内存早早损坏。我敢打赌,数据是在之前malloced 的数据块之前或之后写入的。 -
啊,大概是这样吧,我会回去查看之前的 malloc 并检查它们,谢谢 :)
-
你有崩溃的核心文件吗?如果这样做,并且粘贴回溯,这将有助于诊断问题。
-
您可能希望在要减去的调用中检查 n 的值。检查它是否符合合理的限制。除了内存损坏之外,当分配的字节数由于某些未初始化的变量而导致分配的字节数非常大时,我已经看到此失败。由于 n 是从函数调用中传入的,因此检查它的值是一种很好的编程习惯。
-
dbeer,我该如何找到它?我通常使用 GDB 进行调试,但我最近不得不使用 VS 2010 切换到 Windows - 这是我第一个使用它的程序! Lou:谢谢,但是 n 是由用户在开始时设置的,并在程序中执行..