Malloc调用崩溃,但在其他地方工作

时间:2012-01-06 17:08:31

标签: c crash malloc

我想知道是否有人可能对此有任何见解......

我的程序在此次通话中崩溃:

void subtract(data* array,data* inverse,int a, int b, int q, int n)
{

data* arraytomultiply;
arraytomultiply = (data *)malloc(sizeof(data*) * n);

数据只包含一个int(为了方便以后切换类型)

typedef struct { 
        int value;
}data;

我已经尝试了很多改变指针的方法,因为我对它们完全没有信心,但无济于事。

奇怪的是,在程序的早期,同样的调用工作,我为它分配值,并可以打印出来和一切......:

data* array;
array = (data*)malloc(sizeof(data*) * m * n); // m * n entries

可能有用的一件事(虽然我不知道为什么)是当它在早期工作时它在一个void函数中,而当它崩溃时它在一个从算法中调用的函数中。但我不知道这会对它产生怎样的影响,因为我正在尝试做的事情是不使用任何论据等......

有什么想法吗?

4 个答案:

答案 0 :(得分:5)

由于您为数据结构分配空间,不应该是sizeof(data)而不是sizeof(data *)吗?

答案 1 :(得分:1)

您正在分配m * n而非data *的{​​{1}}元素。如果您想要指向data的指针数组,那么您在data中所做的工作是正确的,但应将其分配给malloc()

data **

应该是

array = (data*)malloc(sizeof(data*) * m * n); // m * n entries

并且,您应该始终检查array = (data*)malloc(sizeof(data) * m * n); // m * n entries 的返回值,以查找它是否失败或成功!

malloc()

您的程序有充分的理由崩溃。但是当你说,if ((array = (data*)malloc(sizeof(data) * m * n)) == NULL) { printf("unable to allocate memory"); return; // you can return your error code here! } 做了一些实验。我尝试了你的代码片段,发现它适合我。我尝试过很多次,但从未坠毁过。我很困惑,我发布了一个问题,找出原因?! - 这里有Are "malloc(sizeof(struct a *))" and "malloc(sizeof(struct a))" the same?

+1你的问题!

答案 2 :(得分:0)

你们都是对的,但无论如何我想知道为什么会崩溃。

我想知道因为data(如上所定义)的大小预期会小于或等于data*的大小。

答案 3 :(得分:0)

当malloc崩溃时,通常是因为你搞砸了它用来跟踪其他地方堆上内存的结构。你的程序是多线程的吗?尝试使用helgrind或drd(两个valgrind工具)运行它。这些可以帮助您跟踪竞争条件,无保护的数据访问或其他线程问题。