您好我正在用C寫一個程序,但是在運行我的程序時出現分段錯誤。將值分配給C中的動態二維數組時分段錯誤
我使用gcc進行編譯,編譯時沒有警告或錯誤。
我試過使用gdb來跟蹤segfault的原點,它指示我將數據值分配給我的二維數組的行: array [row] [column] = datavalue;
當我運行我的程序存儲3個數據值,然後seg故障。它應該將數據存儲在424行,117列的數據上,但是隻有在存儲了3個數據值後,它才能保持數據段的錯誤。
我的代碼如下(有一些細節省略了):
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void allmem(float** fpdata,...); // allocate memory header
void stored(float** fpdata,...); // store data header
void countnumber(int* num1, int*num2,...); // count header
int main() // main() function
{
int numberofrows = 424; // number of rows
float** fpdata; // two dimensional array fpdata of floats
allmem(fpdata,...); // call allocate memory function
stored(fpdata,...); // call function to store data
...
return 0;
} // main()
// --------------stored() function---------------
void stored(float** fpreal,...) {
FILE *fp; // file pointer
float datavalue; // variable to hold data values read
int row;
int column;
fp = fopen("c:/file.txt","r");
for(column = 0; column < 117; column++) {
for(row = 0; row < 424; row++) {
fscanf(fp, "%f,", &datavalue);
fpdata[row][column] = datavalue;
} // for
} // for
fclose(fp);
} // stored()
// ----------allmem() function----------------
// function to allocate memory for two dimensional arrays
// I have hard coded the values of the array sizes in, but
// in my actual program they are calculated at run time based
// on the size of some input files and this is done in the
// countnumber() function
void allmem(float** fpdata,...) {
int i = 0;
fpdata = (float**) malloc((424)*sizeof(float*));
fpdata2 = (float**) malloc((424)*sizeof(float*));
...
for (i = 0; i<424; i++) {
fpdata[i] = (float*) malloc((117)*sizeof(float));
fpdata2[i] = (float*) malloc((117)*sizeof(float));
} // for
} // allmem()
您是否正在檢查以確保您所有對'malloc'的調用都成功返回? – bta 2011-04-02 01:17:03
你說得對,我很抱歉。我刪除了我的答案。 – karlphillip 2011-04-02 01:28:37
是的,我檢查了沒有空指針返回,我沒有用完內存,我想我只是以某種方式寫入分配的內存位置,但我不知道這是如何發生的。 – Veridian 2011-04-02 01:32:12