我想知道是否有人可能对此有任何见解......
我的程序在此次通话中崩溃:
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函数中,而当它崩溃时它在一个从算法中调用的函数中。但我不知道这会对它产生怎样的影响,因为我正在尝试做的事情是不使用任何论据等......
有什么想法吗?
答案 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工具)运行它。这些可以帮助您跟踪竞争条件,无保护的数据访问或其他线程问题。