【发布时间】:2011-04-18 10:21:31
【问题描述】:
我正在学习 C 语言课程,但遇到了分段错误。据我了解,当您访问尚未分配的内存或超出范围的内存时,应该会发生段错误。 '当然,我要做的只是初始化一个数组(虽然相当大)
我只是误解了如何解析二维数组吗?错误放置边界正是导致 seg 错误的原因——我为此使用嵌套的 for-loop 是否错了?
教授提供了时钟功能,所以我希望这不是问题。我在 Cygwin 中运行这段代码,这可能是问题吗?源代码如下。也使用 c99 标准。
非常清楚:我正在寻求帮助来理解(并最终修复)我的代码产生段错误的原因。
#include <stdio.h>
#include <time.h>
int main(void){
//first define the array and two doubles to count elapsed seconds.
double rowMajor, colMajor;
rowMajor = colMajor = 0;
int majorArray [1000][1000] = {};
clock_t start, end;
//set it up to perform the test 100 times.
for(int k = 0; k<10; k++)
{
start=clock();
//first we do row major
for(int i = 0; i < 1000; i++)
{
for(int j = 0; j<1000; j++)
{
majorArray[i][j] = 314;
}
}
end=clock();
rowMajor+= (end-start)/(double)CLOCKS_PER_SEC;
//at this point, we've only done rowMajor, so elapsed = rowMajor
start=clock();
//now we do column major
for(int i = 0; i < 1000; i++)
{
for(int j = 0; j<1000; j++)
{
majorArray[j][i] = 314;
}
}
end=clock();
colMajor += (end-start)/(double)CLOCKS_PER_SEC;
}
//now that we've done the calculations 100 times, we can compare the values.
printf("Row major took %f seconds\n", rowMajor);
printf("Column major took %f seconds\n", colMajor);
if(rowMajor<colMajor)
{
printf("Row major is faster\n");
}
else
{
printf("Column major is faster\n");
}
return 0;
}
【问题讨论】:
-
这是一个很好的家庭作业问题。写得很好,经过深思熟虑,一些人的回答实际上教会了我一些我不知道的东西(特别是堆栈大小限制)。我赞扬你,OP。
-
与您的问题无关,但鉴于这是家庭作业:您的第一个
start=time();似乎在错误的位置,它应该在 for 循环之前,否则它会重置每个循环,毫无目的
标签: c for-loop segmentation-fault multidimensional-array