Search code examples
cmemorymallocbus-error

Why does my 2D array cause a bus error in C?


I'm attempting to create a simple 2D array in C but apparently running into some memory trouble. My setup is simple enough and I can't tell what's wrong. I admit that my understanding of pointers is insufficient, but I still think this should be working. Can anyone see the flaw here?

typedef unsigned int DATUM;
DATUM **series_of_data;
void initialize_data()
{
    *series_of_data = (DATUM *) malloc(1024 * sizeof(DATUM));
}

This causes my program to crash with a bus error when I run it.


Solution

  • series_of_data is an invalid pointer - you don't assign it to anything. When you try to assign to its memory location (*series_of_data = ...), it's putting stuff in a random place, which is likely to not do what you want. You have to point series_of_data somewhere useful, e.g.

    series_of_data = (DATUM **)malloc(16 * sizeof(DATUM *))
    

    for an array with 16 slots for DATUM * pointers in it.