【发布时间】:2020-06-26 11:04:50
【问题描述】:
谁能解释下面的代码有什么问题?如果我将“line”变量指定为 1、2、3 或 4,它会正确运行。但是在 4 之后它只是正确显示了行数,列数不正确。
dev-c/c++在windows上的输出>>“返回值3221225477”
gcc 在 mac 上的输出 >> "Segmentation fault: 11"
#include<stdio.h>
#include<stdlib.h>
int main(){
int **matris;
int size;
int i, j;
printf( "Size >> " );
scanf( "%d", &size );
matris = (int **)malloc( size * sizeof(int) );
if( matris == NULL )
printf( "It's required more memory'!" );
for( i = 0; i < size; i++ ) {
matris[i] = malloc( size * sizeof(int) );
if( matris[i] == NULL )
printf( "It's required more memory'!!" );
}
for( i = 0; i < size; i++ ) {
for( j = 0; j < size; j++ ){
matris[i][j]=i+1;
printf( "%d ", matris[i][j] );
}
printf( "\n" );
}
for( i = 0; i < size; i++ ) {
free( matris[i] );
}
free( matris );
return 0;
}
【问题讨论】:
-
(int **)malloc( size * sizeof(int) );看起来不对,应该是sizeof(int*) -
matris = (int **)malloc( size * sizeof(int) );你不应该把malloc的返回值转换成C。而且你没有分配正确的大小。matrix指向int*,而不是int。 -
在 gdb 中运行它,它会告诉你到底是什么问题。
-
其他人已经发布了解决方案。尝试使用
printf("int: %zu, ptr: %zu", sizeof(int), sizeof(int*));打印整数与整数指针的大小。在 x86_64/AMD64 机器上,这给了我int: 4, ptr: 8。这就是您的代码崩溃的原因。 -
只需用
int (*matris)[j] = malloc(sizeof(int[size][size]));...free(matris);替换所有讨厌的、分段的错误。
标签: c arrays dynamic-memory-allocation